diff --git a/client/src/components/Files/FileManager.tsx b/client/src/components/Files/FileManager.tsx
index e1979d9b..b8b7de2d 100644
--- a/client/src/components/Files/FileManager.tsx
+++ b/client/src/components/Files/FileManager.tsx
@@ -649,8 +649,17 @@ export default function FileManager({ files = [], onUpload, onDelete, onUpdate,
{dayGroups.map(({ day, dayPlaces }) => (
-
- {day.title || `${t('dayplan.dayN', { n: day.day_number })}${day.date ? ` · ${day.date}` : ''}`}
+
+ {day.title || t('dayplan.dayN', { n: day.day_number })}
+ {(() => {
+ const badge = day.date || (day.title ? t('dayplan.dayN', { n: day.day_number }) : null)
+ return badge ? (
+ {badge}
+ ) : null
+ })()}
{dayPlaces.map(placeBtn)}
diff --git a/client/src/components/Planner/DayDetailPanel.tsx b/client/src/components/Planner/DayDetailPanel.tsx
index 3ff8b102..528c3c4d 100644
--- a/client/src/components/Planner/DayDetailPanel.tsx
+++ b/client/src/components/Planner/DayDetailPanel.tsx
@@ -462,7 +462,10 @@ export default function DayDetailPanel({ day, days, places, categories = [], tri
onChange={v => setHotelDayRange(prev => ({ start: v, end: Math.max(v, prev.end) }))}
options={days.map((d, i) => ({
value: d.id,
- label: `${d.title || t('planner.dayN', { n: i + 1 })}${d.date ? ` — ${new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' })}` : ''}`,
+ 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' })
+ : (d.title ? t('planner.dayN', { n: i + 1 }) : undefined),
}))}
size="sm"
/>
@@ -474,7 +477,10 @@ export default function DayDetailPanel({ day, days, places, categories = [], tri
onChange={v => setHotelDayRange(prev => ({ start: Math.min(prev.start, v), end: v }))}
options={days.map((d, i) => ({
value: d.id,
- label: `${d.title || t('planner.dayN', { n: i + 1 })}${d.date ? ` — ${new Date(d.date + 'T00:00:00Z').toLocaleDateString(locale, { day: 'numeric', month: 'short', timeZone: 'UTC' })}` : ''}`,
+ 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' })
+ : (d.title ? t('planner.dayN', { n: i + 1 }) : undefined),
}))}
size="sm"
/>
diff --git a/client/src/components/Planner/ReservationModal.tsx b/client/src/components/Planner/ReservationModal.tsx
index 38408599..d0a41448 100644
--- a/client/src/components/Planner/ReservationModal.tsx
+++ b/client/src/components/Planner/ReservationModal.tsx
@@ -439,7 +439,15 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p
value={form.hotel_start_day}
onChange={value => set('hotel_start_day', value)}
placeholder={t('reservations.meta.selectDay')}
- options={days.map(d => ({ value: d.id, label: d.title || `${t('dayplan.dayN', { n: d.day_number })}${d.date ? ` · ${formatDate(d.date, locale)}` : ''}` }))}
+ options={days.map(d => {
+ const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
+ const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
+ return {
+ value: d.id,
+ label: d.title || t('dayplan.dayN', { n: d.day_number }),
+ badge: dateBadge ?? dayBadge,
+ }
+ })}
size="sm"
/>
@@ -449,7 +457,15 @@ export function ReservationModal({ isOpen, onClose, onSave, reservation, days, p
value={form.hotel_end_day}
onChange={value => set('hotel_end_day', value)}
placeholder={t('reservations.meta.selectDay')}
- options={days.map(d => ({ value: d.id, label: d.title || `${t('dayplan.dayN', { n: d.day_number })}${d.date ? ` · ${formatDate(d.date, locale)}` : ''}` }))}
+ options={days.map(d => {
+ const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
+ const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
+ return {
+ value: d.id,
+ label: d.title || t('dayplan.dayN', { n: d.day_number }),
+ badge: dateBadge ?? dayBadge,
+ }
+ })}
size="sm"
/>
diff --git a/client/src/components/Planner/TransportModal.tsx b/client/src/components/Planner/TransportModal.tsx
index 53497a76..c04d6003 100644
--- a/client/src/components/Planner/TransportModal.tsx
+++ b/client/src/components/Planner/TransportModal.tsx
@@ -220,10 +220,15 @@ export function TransportModal({ isOpen, onClose, onSave, reservation, days, sel
const dayOptions = [
{ value: '', label: '—' },
- ...days.map(d => ({
- value: d.id,
- label: d.title || `${t('dayplan.dayN', { n: d.day_number })}${d.date ? ` · ${formatDate(d.date, locale) ?? ''}` : ''}`,
- })),
+ ...days.map(d => {
+ const dateBadge = d.date ? (formatDate(d.date, locale) ?? undefined) : undefined
+ const dayBadge = d.title ? t('dayplan.dayN', { n: d.day_number }) : undefined
+ return {
+ value: d.id,
+ label: d.title || t('dayplan.dayN', { n: d.day_number }),
+ badge: dateBadge ?? dayBadge,
+ }
+ }),
]
return (
diff --git a/client/src/components/shared/CustomSelect.tsx b/client/src/components/shared/CustomSelect.tsx
index 580123a2..d8b5ddbb 100644
--- a/client/src/components/shared/CustomSelect.tsx
+++ b/client/src/components/shared/CustomSelect.tsx
@@ -9,6 +9,7 @@ interface SelectOption {
isHeader?: boolean
searchLabel?: string
groupLabel?: string
+ badge?: string
}
interface CustomSelectProps {
@@ -104,6 +105,13 @@ export default function CustomSelect({