diff --git a/components/flow.tsx b/components/flow.tsx index 0fbacb00..28f0dfeb 100644 --- a/components/flow.tsx +++ b/components/flow.tsx @@ -33,6 +33,10 @@ interface ProjectSummary { }[]; } +interface TaskWithDate extends Task { + validDate?: Date; +} + export function Flow() { const [tasks, setTasks] = useState([]); const [error, setError] = useState(null); @@ -91,29 +95,62 @@ export function Flow() { return; } - // Sort tasks by any available date field + // Debug log to see all tasks and their dates + data.tasks.forEach((task: Task) => { + console.log(`Task ${task.id} - ${task.headline} dates:`, { + dateToFinish: task.dateToFinish, + editFrom: task.editFrom, + editTo: task.editTo, + date: task.date + }); + }); + + const getValidDate = (task: Task): Date | undefined => { + // Try dateToFinish first + if (task.dateToFinish && task.dateToFinish !== '0000-00-00 00:00:00') { + const d = new Date(task.dateToFinish); + if (!isNaN(d.getTime())) return d; + } + + // Try editTo + if (task.editTo && task.editTo !== '0000-00-00 00:00:00') { + const d = new Date(task.editTo); + if (!isNaN(d.getTime())) return d; + } + + // Try editFrom + if (task.editFrom && task.editFrom !== '0000-00-00 00:00:00') { + const d = new Date(task.editFrom); + if (!isNaN(d.getTime())) return d; + } + + // Try date + if (task.date && task.date !== '0000-00-00 00:00:00') { + const d = new Date(task.date); + if (!isNaN(d.getTime())) return d; + } + + return undefined; + }; + + // Sort tasks by date const sortedTasks = data.tasks - .sort((a: Task, b: Task) => { - const getDate = (task: Task) => { - if (task.dateToFinish && task.dateToFinish !== '0000-00-00 00:00:00') { - return new Date(task.dateToFinish); - } - if (task.editTo && task.editTo !== '0000-00-00 00:00:00') { - return new Date(task.editTo); - } - if (task.editFrom && task.editFrom !== '0000-00-00 00:00:00') { - return new Date(task.editFrom); - } - if (task.date && task.date !== '0000-00-00 00:00:00') { - return new Date(task.date); - } - return new Date(0); // Default to oldest date if no valid date found - }; - return getDate(a).getTime() - getDate(b).getTime(); + .map((task: Task): TaskWithDate => ({ + ...task, + validDate: getValidDate(task) + })) + .filter((task: TaskWithDate) => task.validDate !== undefined) + .sort((a: TaskWithDate, b: TaskWithDate) => { + return (a.validDate as Date).getTime() - (b.validDate as Date).getTime(); }) .slice(0, 6); - console.log('Sorted tasks:', sortedTasks); + console.log('Final sorted tasks:', sortedTasks.map((t: TaskWithDate) => ({ + id: t.id, + headline: t.headline, + date: t.validDate?.toISOString() + }))); + setTasks(sortedTasks); } catch (error) { console.error('Error fetching tasks:', error); @@ -127,6 +164,36 @@ export function Flow() { fetchTasks(); }, []); + // Update the date display component + const TaskDate = ({ task }: { task: Task & { validDate?: Date } }) => { + const today = new Date(); + today.setHours(0, 0, 0, 0); + + if (!task.validDate) { + return ( + <> + NO + DATE + + ); + } + + const isPastDue = task.validDate < today; + const textColorClass = isPastDue ? 'text-red-600' : 'text-blue-600'; + const boldColorClass = isPastDue ? 'text-red-700' : 'text-blue-700'; + + return ( + <> + + {task.validDate.toLocaleDateString('fr-FR', { month: 'short' })} + + + {task.validDate.getDate()} + + + ); + }; + return ( @@ -158,54 +225,7 @@ export function Flow() { >
- {(() => { - const getValidDate = (task: Task) => { - const dates = [ - task.dateToFinish, - task.editTo, - task.editFrom, - task.date - ]; - - for (const d of dates) { - if (d && d !== '0000-00-00 00:00:00') { - const parsed = new Date(d); - if (!isNaN(parsed.getTime())) { - return parsed; - } - } - } - return null; - }; - - const date = getValidDate(task); - const today = new Date(); - today.setHours(0, 0, 0, 0); - - if (!date) { - return ( - <> - NO - DATE - - ); - } - - const isPastDue = date < today; - const textColorClass = isPastDue ? 'text-red-600' : 'text-blue-600'; - const boldColorClass = isPastDue ? 'text-red-700' : 'text-blue-700'; - - return ( - <> - - {date.toLocaleDateString('fr-FR', { month: 'short' })} - - - {date.getDate()} - - - ); - })()} +