vision refactor

This commit is contained in:
alma 2026-01-15 20:08:23 +01:00
parent 3fceeb0abc
commit 53c5b0e8a9

View File

@ -296,6 +296,29 @@ export default function VisionPage() {
return now >= fiveMinutesBeforeStart && now <= end;
};
// 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();
// Find meetings for this group/mission
const relevantMeetings = scheduledMeetings.filter(meeting =>
meeting.type === type && meeting.entityId === entityId
);
// Check if any meeting is currently active (5 minutes before start until end)
return relevantMeetings.some(meeting => {
const start = new Date(meeting.start);
const end = new Date(meeting.end);
// Calculate 5 minutes before start
const fiveMinutesBeforeStart = new Date(start);
fiveMinutesBeforeStart.setMinutes(fiveMinutesBeforeStart.getMinutes() - 5);
// Active if now is between 5 minutes before start and end
return now >= fiveMinutesBeforeStart && now <= end;
});
};
// Helper function to format date as YYYY-MM-DD in local timezone
const formatDateLocal = (date: Date): string => {
const year = date.getFullYear();
@ -871,17 +894,19 @@ export default function VisionPage() {
</div>
</div>
<div className="flex items-center gap-2 ml-2">
<Button
size="sm"
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
onClick={(e) => {
e.stopPropagation();
handleConferenceClick("group", group.id, group.name);
}}
>
<Video className="h-4 w-4" />
Réunion
</Button>
{hasActiveMeeting("group", group.id) && (
<Button
size="sm"
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
onClick={(e) => {
e.stopPropagation();
handleConferenceClick("group", group.id, group.name);
}}
>
<Video className="h-4 w-4" />
Réunion
</Button>
)}
<Button
variant="outline"
size="sm"
@ -950,17 +975,19 @@ export default function VisionPage() {
</div>
</div>
<div className="flex items-center gap-2 ml-2">
<Button
size="sm"
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
onClick={(e) => {
e.stopPropagation();
handleConferenceClick("mission", mission.id, mission.name);
}}
>
<Video className="h-4 w-4" />
Réunion
</Button>
{hasActiveMeeting("mission", mission.id) && (
<Button
size="sm"
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
onClick={(e) => {
e.stopPropagation();
handleConferenceClick("mission", mission.id, mission.name);
}}
>
<Video className="h-4 w-4" />
Réunion
</Button>
)}
<Button
variant="outline"
size="sm"
@ -1018,7 +1045,22 @@ export default function VisionPage() {
newStart.setHours(currentStart.getHours(), currentStart.getMinutes());
}
}
setMeetingForm({ ...meetingForm, start: newStart.toISOString().slice(0, 16) });
// Update end date to match start date
const newEnd = new Date(newStart);
if (!meetingForm.allDay) {
const currentEnd = getDateFromString(meetingForm.end);
if (currentEnd) {
newEnd.setHours(currentEnd.getHours(), currentEnd.getMinutes());
} else {
// Default to 1 hour after start if no end time set
newEnd.setHours(newStart.getHours() + 1, newStart.getMinutes());
}
}
setMeetingForm({
...meetingForm,
start: newStart.toISOString().slice(0, 16),
end: newEnd.toISOString().slice(0, 16)
});
}
}}
dateFormat="dd/MM/yyyy"
@ -1036,7 +1078,19 @@ export default function VisionPage() {
const currentStart = getDateFromString(meetingForm.start) || new Date();
const newStart = new Date(currentStart);
newStart.setHours(date.getHours(), date.getMinutes());
setMeetingForm({ ...meetingForm, start: newStart.toISOString().slice(0, 16) });
// Update end date to match start date, keeping end time
const currentEnd = getDateFromString(meetingForm.end) || new Date();
const newEnd = new Date(newStart);
newEnd.setHours(currentEnd.getHours(), currentEnd.getMinutes());
// If end time is before start time, set end to 1 hour after start
if (newEnd <= newStart) {
newEnd.setHours(newStart.getHours() + 1, newStart.getMinutes());
}
setMeetingForm({
...meetingForm,
start: newStart.toISOString().slice(0, 16),
end: newEnd.toISOString().slice(0, 16)
});
}
}}
showTimeSelect