final shown date is 4 weeks after the last end date

This commit is contained in:
Oliver Bryan
2026-01-21 18:15:06 +00:00
parent 4c778eb12c
commit 37fe316ecd

View File

@@ -32,6 +32,14 @@ const toDate = (value: Date | string) => {
return new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate()); return new Date(parsed.getFullYear(), parsed.getMonth(), parsed.getDate());
}; };
const startOfWeek = (value: Date) => {
const day = value.getDay();
const diff = (day + 6) % 7;
return addDays(value, -diff);
};
const endOfWeek = (value: Date) => addDays(startOfWeek(value), 6);
const formatDate = (value: Date | string) => const formatDate = (value: Date | string) =>
new Date(value).toLocaleDateString(undefined, { month: "short", day: "numeric" }).toUpperCase(); new Date(value).toLocaleDateString(undefined, { month: "short", day: "numeric" }).toUpperCase();
@@ -122,18 +130,15 @@ export default function Timeline() {
const timelineRange = useMemo<TimelineRange | null>(() => { const timelineRange = useMemo<TimelineRange | null>(() => {
if (sprints.length === 0) return null; if (sprints.length === 0) return null;
const today = toDate(new Date()); const today = toDate(new Date());
let earliest = toDate(sprints[0].startDate);
let latest = toDate(sprints[0].endDate); let latest = toDate(sprints[0].endDate);
for (const sprint of sprints) { for (const sprint of sprints) {
const start = toDate(sprint.startDate);
const end = toDate(sprint.endDate); const end = toDate(sprint.endDate);
if (start < earliest) earliest = start;
if (end > latest) latest = end; if (end > latest) latest = end;
} }
const rangeStart = today; const rangeStart = today;
const rangeEnd = addDays(today, 60); const rangeEnd = endOfWeek(addDays(latest, 28));
const totalDays = Math.round((rangeEnd.getTime() - rangeStart.getTime()) / DAY_MS); const totalDays = Math.round((rangeEnd.getTime() - rangeStart.getTime()) / DAY_MS);
return { start: rangeStart, end: rangeEnd, totalDays }; return { start: rangeStart, end: rangeEnd, totalDays };