fix: show membership date for stores without pickups
Treat Foodsharing's zero lastFetch value as no pickup, store memberSince, and show compact, visible mobile status information without hover tooltips.
This commit is contained in:
@@ -9,14 +9,28 @@ const FILTER_OPTIONS = [
|
||||
{ value: 'inactive', label: 'Inaktiv' }
|
||||
];
|
||||
|
||||
const formatLastPickup = (value) => {
|
||||
const date = new Date(value);
|
||||
if (!value || Number.isNaN(date.getTime())) {
|
||||
return { relative: 'Unbekannt', exact: null };
|
||||
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: date.toLocaleDateString('de-DE')
|
||||
exact: formatDate(date)
|
||||
};
|
||||
};
|
||||
|
||||
@@ -97,7 +111,7 @@ const MobileConfigList = ({
|
||||
{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);
|
||||
const lastPickup = formatLastPickup(entry.lastPickupAt, entry.memberSinceAt);
|
||||
return (
|
||||
<article
|
||||
key={entry.id}
|
||||
@@ -109,8 +123,16 @@ const MobileConfigList = ({
|
||||
<h3 className="mobile-config-card__title">{entry.label || `Store ${entry.id}`}</h3>
|
||||
<p className="mobile-config-card__id">#{entry.id}</p>
|
||||
{slots && <p className="mobile-config-card__slots">Slots: {slots}</p>}
|
||||
<p className="mobile-config-card__last-pickup" title={lastPickup.exact || undefined}>
|
||||
Letzte Abholung: <strong>{lastPickup.relative}</strong>
|
||||
<p className={`mobile-config-card__last-pickup mobile-config-card__last-pickup--${lastPickup.state}`}>
|
||||
{lastPickup.state === 'never' ? (
|
||||
<>
|
||||
Noch nicht abgeholt{lastPickup.memberSince && <> · Beitritt: <strong>{lastPickup.memberSince}</strong></>}
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
Letzte Abholung: <strong>{lastPickup.relative}</strong> · {lastPickup.exact}
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
</div>
|
||||
<a
|
||||
|
||||
Reference in New Issue
Block a user