vision refactor
This commit is contained in:
parent
3fceeb0abc
commit
53c5b0e8a9
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user