import { useMemo, useState } from 'react'; import { formatDistanceToNowStrict } from 'date-fns'; import { de } from 'date-fns/locale'; import './MobileConfigList.css'; const FILTER_OPTIONS = [ { value: 'all', label: 'Alle' }, { value: 'active', label: 'Aktiv' }, { value: 'inactive', label: 'Inaktiv' } ]; const formatDate = (date) => date.toLocaleDateString('de-DE', { day: '2-digit', month: '2-digit', year: 'numeric' }); const formatLastPickup = (lastPickupAt, memberSinceAt) => { const date = new Date(lastPickupAt); if (!lastPickupAt || Number.isNaN(date.getTime()) || date.getTime() <= 0) { const memberSince = new Date(memberSinceAt); return { state: 'never', memberSince: memberSinceAt && !Number.isNaN(memberSince.getTime()) ? formatDate(memberSince) : null }; } const ageDays = (Date.now() - date.getTime()) / (1000 * 60 * 60 * 24); return { state: ageDays >= 90 ? 'stale' : 'current', relative: formatDistanceToNowStrict(date, { addSuffix: true, locale: de }), exact: formatDate(date) }; }; const MobileConfigList = ({ entries, regularPickupMap, weekdays, formatRangeLabel, formatRegularPickup, onToggleActive, onToggleAutoDeactivate, onToggleProfileCheck, onToggleOnlyNotify, onToggleDormantSkip, onWeekdayChange, onRangePickerRequest, onHideEntry, onDeleteEntry, canDelete, isDirty, onSaveConfig, onResetConfig }) => { const [search, setSearch] = useState(''); const [activityFilter, setActivityFilter] = useState('all'); const filteredEntries = useMemo(() => { const normalizedSearch = search.trim().toLocaleLowerCase('de-DE'); return (Array.isArray(entries) ? entries : []).filter((entry) => { if (activityFilter === 'active' && !entry.active) { return false; } if (activityFilter === 'inactive' && entry.active) { return false; } if (!normalizedSearch) { return true; } return `${entry.label || ''} ${entry.id || ''}`.toLocaleLowerCase('de-DE').includes(normalizedSearch); }); }, [activityFilter, entries, search]); return (

Slot-Konfiguration

{entries.length} Betriebe

{FILTER_OPTIONS.map((option) => ( ))}
{filteredEntries.map((entry) => { const range = entry.desiredDateRange || (entry.desiredDate ? { start: entry.desiredDate, end: entry.desiredDate } : null); const slots = formatRegularPickup(regularPickupMap?.[entry.id]); const lastPickup = formatLastPickup(entry.lastPickupAt, entry.memberSinceAt); return (

{entry.label || `Store ${entry.id}`}

#{entry.id}

{slots &&

Slots: {slots}

}

{lastPickup.state === 'never' ? ( <> Noch nicht abgeholt{lastPickup.memberSince && <> · Beitritt: {lastPickup.memberSince}} ) : ( <> Letzte Abholung: {lastPickup.relative} · {lastPickup.exact} )}

Weitere Optionen
{canDelete && }
); })}
{filteredEntries.length === 0 &&

Keine passenden Betriebe gefunden.

} {isDirty && (
)}
); }; export default MobileConfigList;