mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 06:28:19 +02:00
Improve year week calculation for accurate display of past and future events
Refactor the `getYearWeeks` function to use a safer `Date` constructor and limit the number of weeks generated, addressing an issue with the year 2025 calculation. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 0ec86cdf-a5be-4b0e-84a3-07b926f5cc80 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/0ec86cdf-a5be-4b0e-84a3-07b926f5cc80/ZJYssQp
This commit is contained in:
1 parent
df061adf7a
commit
55afb8eb70
2 files changed
+48
-54
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
@@ -1,4 +1,4 @@
|
|||||||
import { useState } from "react";
|
import { useState, useMemo } from "react";
|
||||||
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
||||||
import { Plus, Calendar, Edit, Trash2, Eye, Filter, Grid, List } from "lucide-react";
|
import { Plus, Calendar, Edit, Trash2, Eye, Filter, Grid, List } from "lucide-react";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
@@ -166,68 +166,62 @@ export default function Publicities() {
|
|||||||
|
|
||||||
// Year overview - Generate weeks for the selected year
|
// Year overview - Generate weeks for the selected year
|
||||||
const getYearWeeks = () => {
|
const getYearWeeks = () => {
|
||||||
const yearStart = startOfYear(new Date(selectedYear, 0, 1));
|
try {
|
||||||
const yearEnd = endOfYear(new Date(selectedYear, 11, 31));
|
// SAFE: Use simple Date constructor to avoid issues with specific years
|
||||||
|
const yearStart = new Date(selectedYear, 0, 1); // 1er janvier
|
||||||
|
const yearEnd = new Date(selectedYear, 11, 31); // 31 décembre
|
||||||
|
|
||||||
const weeks = eachWeekOfInterval(
|
const weeks = eachWeekOfInterval(
|
||||||
{ start: yearStart, end: yearEnd },
|
{ start: yearStart, end: yearEnd },
|
||||||
{ weekStartsOn: 1 }
|
{ weekStartsOn: 1 }
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log(`📅 getYearWeeks debug pour ${selectedYear}:`, {
|
// SAFE: Limit the number of weeks to prevent performance issues
|
||||||
yearStart: format(yearStart, 'yyyy-MM-dd EEEE', { locale: fr }),
|
const limitedWeeks = weeks.slice(0, 54); // Maximum 54 semaines par année
|
||||||
yearEnd: format(yearEnd, 'yyyy-MM-dd EEEE', { locale: fr }),
|
|
||||||
totalWeeks: weeks.length
|
|
||||||
});
|
|
||||||
|
|
||||||
return weeks.map((weekStart, index) => {
|
console.log(`📅 getYearWeeks debug pour ${selectedYear}:`, {
|
||||||
const weekEnd = endOfWeek(weekStart, { weekStartsOn: 1 });
|
yearStart: format(yearStart, 'yyyy-MM-dd', { locale: fr }),
|
||||||
// Utiliser l'index + 1 pour une numérotation séquentielle cohérente
|
yearEnd: format(yearEnd, 'yyyy-MM-dd', { locale: fr }),
|
||||||
// plutôt que getWeek() qui peut créer des doublons en fin d'année
|
totalWeeks: limitedWeeks.length
|
||||||
const weekNumber = index + 1;
|
});
|
||||||
|
|
||||||
// Déterminer le mois basé sur la majorité des jours de la semaine
|
return limitedWeeks.map((weekStart, index) => {
|
||||||
// Si la semaine chevauche deux mois, prendre le mois qui contient le plus de jours
|
const weekEnd = endOfWeek(weekStart, { weekStartsOn: 1 });
|
||||||
const weekMidpoint = new Date(weekStart.getTime() + (3.5 * 24 * 60 * 60 * 1000)); // Milieu de la semaine
|
const weekNumber = index + 1;
|
||||||
let month = getMonth(weekMidpoint);
|
|
||||||
|
|
||||||
// Si c'est une semaine qui chevauche décembre de l'année précédente et janvier de l'année sélectionnée,
|
// SIMPLE: Use week midpoint to determine month
|
||||||
// la placer en janvier (mois 0) si elle contient plus de jours de janvier
|
const weekMidpoint = new Date(weekStart.getTime() + (3 * 24 * 60 * 60 * 1000));
|
||||||
if (weekStart.getFullYear() < selectedYear && weekEnd.getFullYear() === selectedYear) {
|
const month = weekMidpoint.getMonth();
|
||||||
month = 0; // Janvier
|
|
||||||
}
|
|
||||||
// Si c'est une semaine qui chevauche décembre et janvier de l'année suivante,
|
|
||||||
// la placer en décembre (mois 11) si elle contient plus de jours de décembre
|
|
||||||
else if (weekStart.getFullYear() === selectedYear && weekEnd.getFullYear() > selectedYear) {
|
|
||||||
month = 11; // Décembre
|
|
||||||
}
|
|
||||||
|
|
||||||
const participation = getWeekParticipation(weekStart, weekEnd);
|
const participation = getWeekParticipation(weekStart, weekEnd);
|
||||||
|
|
||||||
// Debug première et dernières semaines pour vérifier
|
return {
|
||||||
if (index < 3 || index >= weeks.length - 3) {
|
weekStart,
|
||||||
console.log(`📅 Semaine ${weekNumber} (index ${index}):`, {
|
weekEnd,
|
||||||
debut: format(weekStart, 'yyyy-MM-dd EEEE', { locale: fr }),
|
weekNumber,
|
||||||
fin: format(weekEnd, 'yyyy-MM-dd EEEE', { locale: fr }),
|
month,
|
||||||
weekStartYear: weekStart.getFullYear(),
|
...participation
|
||||||
weekEndYear: weekEnd.getFullYear(),
|
};
|
||||||
selectedYear,
|
});
|
||||||
mois: month + 1, // +1 car getMonth retourne 0-11
|
} catch (error) {
|
||||||
participations: participation.publicities.length
|
console.error(`❌ Erreur getYearWeeks pour ${selectedYear}:`, error);
|
||||||
});
|
return []; // Retourner un tableau vide en cas d'erreur
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
|
||||||
weekStart,
|
|
||||||
weekEnd,
|
|
||||||
weekNumber,
|
|
||||||
month,
|
|
||||||
...participation
|
|
||||||
};
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const yearWeeks = getYearWeeks();
|
// SAFE: Only calculate yearWeeks if we have valid data
|
||||||
|
const yearWeeks = useMemo(() => {
|
||||||
|
try {
|
||||||
|
if (!selectedYear || selectedYear < 1900 || selectedYear > 2100) {
|
||||||
|
console.warn(`📅 Année invalide ignorée: ${selectedYear}`);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return getYearWeeks();
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`❌ Erreur calcul yearWeeks pour ${selectedYear}:`, error);
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}, [selectedYear, publicities]);
|
||||||
|
|
||||||
const handleView = (publicity: PublicityWithRelations) => {
|
const handleView = (publicity: PublicityWithRelations) => {
|
||||||
setSelectedPublicity(publicity);
|
setSelectedPublicity(publicity);
|
||||||
|
|||||||
Reference in new issue
Block a user