diff --git a/client/src/pages/DashboardPage.tsx b/client/src/pages/DashboardPage.tsx index 1b935861..1cab4024 100644 --- a/client/src/pages/DashboardPage.tsx +++ b/client/src/pages/DashboardPage.tsx @@ -15,7 +15,7 @@ import { useToast } from '../components/shared/Toast' import { Plus, Calendar, Trash2, Edit2, Map, ChevronDown, ChevronUp, Archive, ArchiveRestore, Clock, MapPin, Settings, X, ArrowRightLeft, Users, - LayoutGrid, List, Copy, Bell, + LayoutGrid, List, Copy, Bell, CircleCheck, } from 'lucide-react' import { useCanDo } from '../store/permissionsStore' @@ -311,10 +311,12 @@ function MobileTripCard({ trip, onEdit, onCopy, onDelete, onArchive, onClick, t, {/* Countdown badge */} {badgeText && ( -
- +
+ {status === 'ongoing' ? ( + ) : status === 'past' ? ( + ) : ( )} @@ -401,10 +403,12 @@ function TripCard({ trip, onEdit, onCopy, onDelete, onArchive, onClick, t, local {/* Status badge top-left */} {badgeText && ( -
- +
+ {status === 'ongoing' ? ( + ) : status === 'past' ? ( + ) : ( )} @@ -850,111 +854,20 @@ export default function DashboardPage(): React.ReactElement {
- {/* Mobile: Live Trip Hero */} - {(() => { - const liveTrip = trips.find(t => getTripStatus(t) === 'ongoing') - if (!liveTrip) return null - const today = new Date().toISOString().split('T')[0] - const startDate = liveTrip.start_date || today - const endDate = liveTrip.end_date || today - const totalDays = Math.max(1, Math.ceil((new Date(endDate).getTime() - new Date(startDate).getTime()) / 86400000) + 1) - const currentDay = Math.min(totalDays, Math.ceil((new Date(today).getTime() - new Date(startDate).getTime()) / 86400000) + 1) - const daysLeft = Math.max(0, totalDays - currentDay) - const progress = Math.round((currentDay / totalDays) * 100) - - return ( -
-
navigate(`/trips/${liveTrip.id}`)} - className="relative rounded-3xl overflow-hidden cursor-pointer" - style={{ minHeight: 340 }} - > - {/* Background */} -
- {liveTrip.cover_image && ( - <> - -
- - )} -
-
- - {/* Content */} -
- {/* Top badges */} -
- - - {t("dashboard.mobile.liveNow")} - -
- - - - -
-
- - {/* Title area */} -
-

{liveTrip.title}

-

- {formatDateShort(liveTrip.start_date)} — {formatDateShort(liveTrip.end_date)} · {t('journey.pdf.day')} {currentDay} / {totalDays} -

-
- - {/* Progress */} -
-
- {t('dashboard.mobile.tripProgress')} - {daysLeft} days left -
-
-
- -
-
-
- - {/* Stats */} -
-
-

{liveTrip.place_count || 0}

-

Places

-
-
-

{liveTrip.shared_count || 0}

-

Buddies

-
-
-
-
-
- ) - })()} + {/* Mobile: Hero Trip (spotlight — ongoing or next upcoming) */} + {!isLoading && spotlight && ( +
+ { setEditingTrip(tr); setShowForm(true) } : undefined} + onCopy={can('trip_create') ? handleCopy : undefined} + onDelete={can('trip_delete', spotlight) ? handleDelete : undefined} + onArchive={can('trip_archive', spotlight) ? handleArchive : undefined} + onClick={tr => navigate(`/trips/${tr.id}`)} + /> +
+ )} {/* Mobile: Quick Actions */}