feat: add copy/duplicate trip from dashboard (#270)

New POST /api/trips/:id/copy endpoint that deep copies all trip
planning data (days, places, assignments, reservations, budget,
packing, accommodations, day notes) with proper FK remapping
inside a transaction. Skips files, collab data, and members.

Copy button on all dashboard card types (spotlight, grid, list,
archived) gated by trip_create permission. Translations for all
12 languages.

Also adds reminder_days to Trip interface (removes as-any casts).
This commit is contained in:
Gérnyi Márk
2026-04-03 12:38:45 +02:00
committed by GitHub
parent a0db42fbfe
commit d48714d17a
16 changed files with 253 additions and 11 deletions

View File

@@ -82,6 +82,8 @@ const nl: Record<string, string> = {
'dashboard.places': 'Plaatsen',
'dashboard.members': 'Reisgenoten',
'dashboard.archive': 'Archiveren',
'dashboard.copyTrip': 'Kopiëren',
'dashboard.copySuffix': 'kopie',
'dashboard.restore': 'Herstellen',
'dashboard.archived': 'Gearchiveerd',
'dashboard.status.ongoing': 'Lopend',
@@ -100,6 +102,8 @@ const nl: Record<string, string> = {
'dashboard.toast.archiveError': 'Reis archiveren mislukt',
'dashboard.toast.restored': 'Reis hersteld',
'dashboard.toast.restoreError': 'Reis herstellen mislukt',
'dashboard.toast.copied': 'Reis gekopieerd!',
'dashboard.toast.copyError': 'Reis kopiëren mislukt',
'dashboard.confirm.delete': 'Reis "{title}" verwijderen? Alle plaatsen en plannen worden permanent verwijderd.',
'dashboard.editTrip': 'Reis bewerken',
'dashboard.createTrip': 'Nieuwe reis aanmaken',