vision refactor
This commit is contained in:
parent
3fceeb0abc
commit
53c5b0e8a9
@ -296,6 +296,29 @@ export default function VisionPage() {
|
|||||||
return now >= fiveMinutesBeforeStart && now <= end;
|
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
|
// Helper function to format date as YYYY-MM-DD in local timezone
|
||||||
const formatDateLocal = (date: Date): string => {
|
const formatDateLocal = (date: Date): string => {
|
||||||
const year = date.getFullYear();
|
const year = date.getFullYear();
|
||||||
@ -871,17 +894,19 @@ export default function VisionPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2 ml-2">
|
<div className="flex items-center gap-2 ml-2">
|
||||||
<Button
|
{hasActiveMeeting("group", group.id) && (
|
||||||
size="sm"
|
<Button
|
||||||
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
|
size="sm"
|
||||||
onClick={(e) => {
|
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
|
||||||
e.stopPropagation();
|
onClick={(e) => {
|
||||||
handleConferenceClick("group", group.id, group.name);
|
e.stopPropagation();
|
||||||
}}
|
handleConferenceClick("group", group.id, group.name);
|
||||||
>
|
}}
|
||||||
<Video className="h-4 w-4" />
|
>
|
||||||
Réunion
|
<Video className="h-4 w-4" />
|
||||||
</Button>
|
Réunion
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
@ -950,17 +975,19 @@ export default function VisionPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2 ml-2">
|
<div className="flex items-center gap-2 ml-2">
|
||||||
<Button
|
{hasActiveMeeting("mission", mission.id) && (
|
||||||
size="sm"
|
<Button
|
||||||
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
|
size="sm"
|
||||||
onClick={(e) => {
|
className="flex items-center gap-2 bg-blue-600 hover:bg-blue-700 text-white"
|
||||||
e.stopPropagation();
|
onClick={(e) => {
|
||||||
handleConferenceClick("mission", mission.id, mission.name);
|
e.stopPropagation();
|
||||||
}}
|
handleConferenceClick("mission", mission.id, mission.name);
|
||||||
>
|
}}
|
||||||
<Video className="h-4 w-4" />
|
>
|
||||||
Réunion
|
<Video className="h-4 w-4" />
|
||||||
</Button>
|
Réunion
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
@ -1018,7 +1045,22 @@ export default function VisionPage() {
|
|||||||
newStart.setHours(currentStart.getHours(), currentStart.getMinutes());
|
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"
|
dateFormat="dd/MM/yyyy"
|
||||||
@ -1036,7 +1078,19 @@ export default function VisionPage() {
|
|||||||
const currentStart = getDateFromString(meetingForm.start) || new Date();
|
const currentStart = getDateFromString(meetingForm.start) || new Date();
|
||||||
const newStart = new Date(currentStart);
|
const newStart = new Date(currentStart);
|
||||||
newStart.setHours(date.getHours(), date.getMinutes());
|
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
|
showTimeSelect
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user