fallback day-number badge when a day has no date

If a trip has no dates set but a day has a custom title, the
dropdown showed only the title with no context. Fall back to
'Day N' as the badge so users can still tell which day it is.
This commit is contained in:
Maurice
2026-04-21 12:34:45 +02:00
parent 3450bd59f8
commit 1cc43f63df
4 changed files with 42 additions and 23 deletions
+9 -6
View File
@@ -651,12 +651,15 @@ export default function FileManager({ files = [], onUpload, onDelete, onUpdate,
<div key={day.id}> <div key={day.id}>
<div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 11, fontWeight: 600, color: 'var(--text-muted)', padding: '8px 10px 2px' }}> <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 11, fontWeight: 600, color: 'var(--text-muted)', padding: '8px 10px 2px' }}>
<span>{day.title || t('dayplan.dayN', { n: day.day_number })}</span> <span>{day.title || t('dayplan.dayN', { n: day.day_number })}</span>
{day.date && ( {(() => {
<span style={{ const badge = day.date || (day.title ? t('dayplan.dayN', { n: day.day_number }) : null)
fontSize: 10, fontWeight: 600, color: 'var(--text-faint)', return badge ? (
background: 'var(--bg-tertiary)', padding: '1px 6px', borderRadius: 999, <span style={{
}}>{day.date}</span> fontSize: 10, fontWeight: 600, color: 'var(--text-faint)',
)} background: 'var(--bg-tertiary)', padding: '1px 6px', borderRadius: 999,
}}>{badge}</span>
) : null
})()}
</div> </div>
{dayPlaces.map(placeBtn)} {dayPlaces.map(placeBtn)}
</div> </div>
@@ -463,7 +463,9 @@ export default function DayDetailPanel({ day, days, places, categories = [], tri
options={days.map((d, i) => ({ options={days.map((d, i) => ({
value: d.id, value: d.id,
label: d.title || t('planner.dayN', { n: i + 1 }), label: d.title || t('planner.dayN', { n: i + 1 }),
badge: d.date ? new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' }) : undefined, badge: d.date
? new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' })
: (d.title ? t('planner.dayN', { n: i + 1 }) : undefined),
}))} }))}
size="sm" size="sm"
/> />
@@ -476,7 +478,9 @@ export default function DayDetailPanel({ day, days, places, categories = [], tri
options={days.map((d, i) => ({ options={days.map((d, i) => ({
value: d.id, value: d.id,
label: d.title || t('planner.dayN', { n: i + 1 }), label: d.title || t('planner.dayN', { n: i + 1 }),
badge: d.date ? new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' }) : undefined, badge: d.date
? new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' })
: (d.title ? t('planner.dayN', { n: i + 1 }) : undefined),
}))} }))}
size="sm" size="sm"
/> />
@@ -439,11 +439,15 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p
value={form.hotel_start_day} value={form.hotel_start_day}
onChange={value => set('hotel_start_day', value)} onChange={value => set('hotel_start_day', value)}
placeholder={t('reservations.meta.selectDay')} placeholder={t('reservations.meta.selectDay')}
options={days.map(d => ({ options={days.map(d => {
value: d.id, const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
label: d.title || t('dayplan.dayN', { n: d.day_number }), const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
badge: d.date ? (formatDate(d.date, locale) ?? undefined) : undefined, return {
}))} value: d.id,
label: d.title || t('dayplan.dayN', { n: d.day_number }),
badge: dateBadge ?? dayBadge,
}
})}
size="sm" size="sm"
/> />
</div> </div>
@@ -453,11 +457,15 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p
value={form.hotel_end_day} value={form.hotel_end_day}
onChange={value => set('hotel_end_day', value)} onChange={value => set('hotel_end_day', value)}
placeholder={t('reservations.meta.selectDay')} placeholder={t('reservations.meta.selectDay')}
options={days.map(d => ({ options={days.map(d => {
value: d.id, const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
label: d.title || t('dayplan.dayN', { n: d.day_number }), const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
badge: d.date ? (formatDate(d.date, locale) ?? undefined) : undefined, return {
}))} value: d.id,
label: d.title || t('dayplan.dayN', { n: d.day_number }),
badge: dateBadge ?? dayBadge,
}
})}
size="sm" size="sm"
/> />
</div> </div>
@@ -220,11 +220,15 @@ export function TransportModal({ isOpen, onClose, onSave, reservation, days, sel
const dayOptions = [ const dayOptions = [
{ value: '', label: '—' }, { value: '', label: '—' },
...days.map(d => ({ ...days.map(d => {
value: d.id, const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
label: d.title || t('dayplan.dayN', { n: d.day_number }), const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
badge: d.date ? (formatDate(d.date, locale) ?? undefined) : undefined, return {
})), value: d.id,
label: d.title || t('dayplan.dayN', { n: d.day_number }),
badge: dateBadge ?? dayBadge,
}
}),
] ]
return ( return (