vision refactor

This commit is contained in:
alma 2026-01-15 21:13:06 +01:00
parent b185c130c9
commit 925fa95da4

View File

@ -499,6 +499,16 @@ export default function VisionPage() {
}
};
// Format date-time to local format (YYYY-MM-DDTHH:mm) preserving local time
const formatLocalDateTime = (date: Date): string => {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day}T${hours}:${minutes}`;
};
// Handle open meeting dialog
const handleOpenMeetingDialog = (type: "group" | "mission", id: string, name: string) => {
const defaultDate = selectedDate || new Date();
@ -512,8 +522,8 @@ export default function VisionPage() {
entityId: id,
entityName: name,
title: "",
start: startDate.toISOString().slice(0, 16),
end: endDate.toISOString().slice(0, 16),
start: formatLocalDateTime(startDate),
end: formatLocalDateTime(endDate),
allDay: false,
description: "",
recurrence: "none",
@ -706,6 +716,21 @@ export default function VisionPage() {
return date.toLocaleDateString('fr-FR', { weekday: 'long', day: 'numeric', month: 'long' });
};
// Format time range for display (start - end)
const formatTimeRange = (meeting: ScheduledMeeting): string => {
if (meeting.isAllDay) {
return "Toute la journée";
}
if (!meeting.start || !meeting.end) {
return meeting.time || "";
}
const start = new Date(meeting.start);
const end = new Date(meeting.end);
const startTime = start.toTimeString().slice(0, 5);
const endTime = end.toTimeString().slice(0, 5);
return `${startTime} - ${endTime}`;
};
// Show loading state
if (status === "loading" || loading) {
return (
@ -794,7 +819,10 @@ export default function VisionPage() {
{meeting.title || `${meeting.type === "group" ? "Groupe" : "Mission"}: ${meeting.entityName}`}
</h3>
<p className="text-sm text-gray-500">
{meeting.time} - {formatDate(meeting.date)}
{meeting.type === "group" ? "Groupe" : "Mission"}: {meeting.entityName}
</p>
<p className="text-sm text-gray-500">
{formatTimeRange(meeting)}
</p>
</div>
</div>
@ -976,12 +1004,17 @@ export default function VisionPage() {
<h4 className="font-medium text-gray-900">
{meeting.title || `${meeting.type === "group" ? "Groupe" : "Mission"}: ${meeting.entityName}`}
</h4>
<p className="text-sm text-gray-500">{meeting.time}</p>
<p className="text-sm text-gray-500">
{meeting.type === "group" ? "Groupe" : "Mission"}: {meeting.entityName}
</p>
<p className="text-sm text-gray-500">
{formatTimeRange(meeting)}
</p>
</div>
{canJoinMeeting(meeting) && (
{canJoinMeeting(meeting) && meeting.location && (
<Button
size="sm"
variant="outline"
className="bg-blue-600 hover:bg-blue-700 text-white"
onClick={() => handleConferenceClick(meeting.type, meeting.entityId, meeting.entityName, meeting.location)}
>
<Video className="h-4 w-4 mr-1" />
@ -1029,9 +1062,6 @@ export default function VisionPage() {
<h3 className="font-medium text-gray-900 truncate">
{group.name}
</h3>
<p className="text-sm text-gray-500 truncate">
{group.path}
</p>
</div>
</div>
<div className="flex items-center gap-2 ml-2">
@ -1198,8 +1228,8 @@ export default function VisionPage() {
}
setMeetingForm({
...meetingForm,
start: newStart.toISOString().slice(0, 16),
end: newEnd.toISOString().slice(0, 16)
start: formatLocalDateTime(newStart),
end: formatLocalDateTime(newEnd)
});
}
}}
@ -1228,8 +1258,8 @@ export default function VisionPage() {
}
setMeetingForm({
...meetingForm,
start: newStart.toISOString().slice(0, 16),
end: newEnd.toISOString().slice(0, 16)
start: formatLocalDateTime(newStart),
end: formatLocalDateTime(newEnd)
});
}
}}
@ -1260,7 +1290,7 @@ export default function VisionPage() {
newEnd.setHours(currentEnd.getHours(), currentEnd.getMinutes());
}
}
setMeetingForm({ ...meetingForm, end: newEnd.toISOString().slice(0, 16) });
setMeetingForm({ ...meetingForm, end: formatLocalDateTime(newEnd) });
}
}}
dateFormat="dd/MM/yyyy"
@ -1279,7 +1309,7 @@ export default function VisionPage() {
const currentEnd = getDateFromString(meetingForm.end) || new Date();
const newEnd = new Date(currentEnd);
newEnd.setHours(date.getHours(), date.getMinutes());
setMeetingForm({ ...meetingForm, end: newEnd.toISOString().slice(0, 16) });
setMeetingForm({ ...meetingForm, end: formatLocalDateTime(newEnd) });
}
}}
showTimeSelect