feat(trips): add configurable day count for trips without dates

- Show day count input in trip form when no start/end date is set
- Backend accepts day_count param for create and update
- Remove forced date assignment for dateless trips (was always setting tomorrow + 7)
- Fix off-by-one: single-date fallback now creates 7 days instead of 8
- Add dayCount/dayCountHint translations for all 13 languages
This commit is contained in:
Maurice
2026-04-05 16:25:09 +02:00
parent 312bc715bf
commit 7f077d949d
16 changed files with 60 additions and 16 deletions
+2
View File
@@ -118,6 +118,8 @@ const ar: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'عمّ تتحدث هذه الرحلة؟',
'dashboard.startDate': 'تاريخ البداية',
'dashboard.endDate': 'تاريخ النهاية',
'dashboard.dayCount': 'عدد الأيام',
'dashboard.dayCountHint': 'عدد الأيام المراد التخطيط لها عندما لا يتم تحديد تواريخ السفر.',
'dashboard.noDateHint': 'لا يوجد تاريخ محدد. سيتم إنشاء 7 أيام افتراضية ويمكنك تغيير ذلك لاحقًا.',
'dashboard.coverImage': 'صورة الغلاف',
'dashboard.addCoverImage': 'إضافة صورة غلاف',
+2
View File
@@ -113,6 +113,8 @@ const br: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'Sobre o que é esta viagem?',
'dashboard.startDate': 'Data de início',
'dashboard.endDate': 'Data de término',
'dashboard.dayCount': 'Número de dias',
'dashboard.dayCountHint': 'Quantos dias planejar quando nenhuma data de viagem for definida.',
'dashboard.noDateHint': 'Sem datas — serão criados 7 dias padrão. Você pode alterar depois.',
'dashboard.coverImage': 'Imagem de capa',
'dashboard.addCoverImage': 'Adicionar capa (ou arrastar e soltar)',
+2
View File
@@ -114,6 +114,8 @@ const cs: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'O čem je tato cesta?',
'dashboard.startDate': 'Datum začátku',
'dashboard.endDate': 'Datum konce',
'dashboard.dayCount': 'Počet dnů',
'dashboard.dayCountHint': 'Kolik dnů naplánovat, když nejsou nastavena data cesty.',
'dashboard.noDateHint': 'Datum nezadáno výchozí délka nastavena na 7 dní. Toto lze kdykoli změnit.',
'dashboard.coverImage': 'Úvodní obrázek',
'dashboard.addCoverImage': 'Vybrat úvodní obrázek (nebo přetáhnout sem)',
+2
View File
@@ -113,6 +113,8 @@ const de: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'Worum geht es bei dieser Reise?',
'dashboard.startDate': 'Startdatum',
'dashboard.endDate': 'Enddatum',
'dashboard.dayCount': 'Anzahl Tage',
'dashboard.dayCountHint': 'Wie viele Tage geplant werden sollen, wenn kein Reisezeitraum gesetzt ist.',
'dashboard.noDateHint': 'Kein Datum gesetzt — es werden 7 Standardtage erstellt. Du kannst das jederzeit ändern.',
'dashboard.coverImage': 'Titelbild',
'dashboard.addCoverImage': 'Titelbild hinzufügen (oder per Drag & Drop)',
+2
View File
@@ -113,6 +113,8 @@ const en: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'What is this trip about?',
'dashboard.startDate': 'Start Date',
'dashboard.endDate': 'End Date',
'dashboard.dayCount': 'Number of Days',
'dashboard.dayCountHint': 'How many days to plan for when no travel dates are set.',
'dashboard.noDateHint': 'No date set — 7 default days will be created. You can change this anytime.',
'dashboard.coverImage': 'Cover Image',
'dashboard.addCoverImage': 'Add cover image (or drag & drop)',
+2
View File
@@ -114,6 +114,8 @@ const es: Record<string, string> = {
'dashboard.tripDescriptionPlaceholder': '¿De qué trata este viaje?',
'dashboard.startDate': 'Fecha de inicio',
'dashboard.endDate': 'Fecha de fin',
'dashboard.dayCount': 'Número de días',
'dashboard.dayCountHint': 'Cuántos días planificar cuando no se han establecido fechas de viaje.',
'dashboard.noDateHint': 'Sin fecha definida: se crearán 7 días por defecto. Puedes cambiarlo cuando quieras.',
'dashboard.coverImage': 'Imagen de portada',
'dashboard.addCoverImage': 'Añadir imagen de portada',
+2
View File
@@ -113,6 +113,8 @@ const fr: Record<string, string> = {
'dashboard.tripDescriptionPlaceholder': 'De quoi parle ce voyage ?',
'dashboard.startDate': 'Date de début',
'dashboard.endDate': 'Date de fin',
'dashboard.dayCount': 'Nombre de jours',
'dashboard.dayCountHint': 'Nombre de jours à planifier lorsqu'aucune date de voyage n'est définie.',
'dashboard.noDateHint': 'Aucune date définie — 7 jours par défaut seront créés. Vous pouvez modifier cela à tout moment.',
'dashboard.coverImage': 'Image de couverture',
'dashboard.addCoverImage': 'Ajouter une image de couverture',
+2
View File
@@ -113,6 +113,8 @@ const hu: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'Miről szól ez az utazás?',
'dashboard.startDate': 'Kezdő dátum',
'dashboard.endDate': 'Záró dátum',
'dashboard.dayCount': 'Napok száma',
'dashboard.dayCountHint': 'Hány napot tervezzen, ha nincsenek utazási dátumok megadva.',
'dashboard.noDateHint': 'Nincs dátum megadva — 7 alapértelmezett nap jön létre. Ezt bármikor módosíthatod.',
'dashboard.coverImage': 'Borítókép',
'dashboard.addCoverImage': 'Borítókép hozzáadása',
+2
View File
@@ -113,6 +113,8 @@ const it: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'Di cosa tratta questo viaggio?',
'dashboard.startDate': 'Data di inizio',
'dashboard.endDate': 'Data di fine',
'dashboard.dayCount': 'Numero di giorni',
'dashboard.dayCountHint': 'Quanti giorni pianificare quando non sono impostate date di viaggio.',
'dashboard.noDateHint': 'Nessuna data impostata — verranno creati 7 giorni predefiniti. Puoi cambiarlo in qualsiasi momento.',
'dashboard.coverImage': 'Immagine di copertina',
'dashboard.addCoverImage': 'Aggiungi immagine di copertina (o trascinala qui)',
+2
View File
@@ -113,6 +113,8 @@ const nl: Record<string, string> = {
'dashboard.tripDescriptionPlaceholder': 'Waar gaat deze reis over?',
'dashboard.startDate': 'Startdatum',
'dashboard.endDate': 'Einddatum',
'dashboard.dayCount': 'Aantal dagen',
'dashboard.dayCountHint': 'Hoeveel dagen te plannen wanneer er geen reisdata zijn ingesteld.',
'dashboard.noDateHint': 'Geen datum ingesteld — er worden standaard 7 dagen aangemaakt. Je kunt dit altijd wijzigen.',
'dashboard.coverImage': 'Omslagafbeelding',
'dashboard.addCoverImage': 'Omslagafbeelding toevoegen',
+2
View File
@@ -99,6 +99,8 @@ const pl: Record<string, string | { name: string; category: string }[]> = {
'dashboard.tripDescriptionPlaceholder': 'Opisz swoją podróż',
'dashboard.startDate': 'Data rozpoczęcia',
'dashboard.endDate': 'Data zakończenia',
'dashboard.dayCount': 'Liczba dni',
'dashboard.dayCountHint': 'Ile dni zaplanować, gdy nie ustawiono dat podróży.',
'dashboard.noDateHint': 'Nie ustawiono daty — zostanie utworzonych 7 domyślnych dni. Możesz to zmienić w dowolnym momencie.',
'dashboard.coverImage': 'Okładka',
'dashboard.addCoverImage': 'Dodaj okładkę (lub przeciągnij i upuść)',
+2
View File
@@ -113,6 +113,8 @@ const ru: Record<string, string> = {
'dashboard.tripDescriptionPlaceholder': 'О чём эта поездка?',
'dashboard.startDate': 'Дата начала',
'dashboard.endDate': 'Дата окончания',
'dashboard.dayCount': 'Количество дней',
'dashboard.dayCountHint': 'Сколько дней планировать, если даты поездки не указаны.',
'dashboard.noDateHint': 'Дата не указана — будет создано 7 дней по умолчанию. Вы можете изменить это в любое время.',
'dashboard.coverImage': 'Обложка',
'dashboard.addCoverImage': 'Добавить обложку',
+2
View File
@@ -113,6 +113,8 @@ const zh: Record<string, string> = {
'dashboard.tripDescriptionPlaceholder': '这次旅行是关于什么的?',
'dashboard.startDate': '开始日期',
'dashboard.endDate': '结束日期',
'dashboard.dayCount': '天数',
'dashboard.dayCountHint': '未设置旅行日期时要规划的天数。',
'dashboard.noDateHint': '未设置日期——将默认创建 7 天。你可以随时修改。',
'dashboard.coverImage': '封面图片',
'dashboard.addCoverImage': '添加封面图片',