diff --git a/app/vision/page.tsx b/app/vision/page.tsx index e9ebf42..99cbe4e 100644 --- a/app/vision/page.tsx +++ b/app/vision/page.tsx @@ -406,6 +406,43 @@ export default function VisionPage() { return canJoin; }; + // Get meeting status for display + const getMeetingStatus = (meeting: ScheduledMeeting): 'before' | 'active' | 'ended' | 'no-link' => { + if (!meeting.location) { + return 'no-link'; + } + + if (!meeting.start || !meeting.end) { + return 'no-link'; + } + + const now = new Date(); + const start = new Date(meeting.start); + const end = new Date(meeting.end); + + // Validate dates + if (isNaN(start.getTime()) || isNaN(end.getTime())) { + return 'no-link'; + } + + // Calculate 5 minutes before start + const fiveMinutesBeforeStart = new Date(start); + fiveMinutesBeforeStart.setMinutes(fiveMinutesBeforeStart.getMinutes() - 5); + + // Check if meeting has ended + if (now > end) { + return 'ended'; + } + + // Check if meeting is active (5 minutes before start until end) + if (now >= fiveMinutesBeforeStart && now <= end) { + return 'active'; + } + + // Before the meeting starts + return 'before'; + }; + // Check if there's an active meeting for a group or mission (5 minutes before start until end) const hasActiveMeeting = (type: "group" | "mission", entityId: string): boolean => { const now = new Date(); @@ -810,20 +847,39 @@ export default function VisionPage() {
- {canJoinMeeting(meeting) && meeting.location ? ( - - ) : ( - - {!meeting.location ? 'Pas de lien' : 'Bientôt disponible'} - - )} + {(() => { + const status = getMeetingStatus(meeting); + if (status === 'active') { + return ( + + ); + } else if (status === 'before') { + return ( + + Bientôt disponible + + ); + } else if (status === 'ended') { + return ( + + Terminé + + ); + } else { + return ( + + Pas de lien + + ); + } + })()}
))}