diff --git a/components/flow.tsx b/components/flow.tsx index 6f914374..4ebadc52 100644 --- a/components/flow.tsx +++ b/components/flow.tsx @@ -38,7 +38,7 @@ interface TaskWithDate extends Task { } export function Flow() { - const [tasks, setTasks] = useState([]); + const [tasks, setTasks] = useState([]); const [error, setError] = useState(null); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); @@ -97,89 +97,95 @@ export function Flow() { // Debug log to see all tasks and their dates data.tasks.forEach((task: Task) => { - console.log(`Task ${task.id} - ${task.headline}:`, task); + console.log(`Task ${task.id} - ${task.headline}:`, { + dateToFinish: task.dateToFinish, + editTo: task.editTo, + editFrom: task.editFrom, + date: task.date + }); }); const getValidDate = (task: Task): Date | undefined => { const tryParseDate = (dateStr: string | undefined, fieldName: string): Date | undefined => { - console.log(`Trying to parse ${fieldName}:`, dateStr); + console.log(`Trying to parse ${fieldName} for task ${task.id}:`, dateStr); if (!dateStr) { - console.log(`${fieldName} is empty or undefined`); + console.log(`${fieldName} is empty or undefined for task ${task.id}`); return undefined; } if (dateStr === '0000-00-00 00:00:00') { - console.log(`${fieldName} is invalid format (0000-00-00)`); + console.log(`${fieldName} is invalid format (0000-00-00) for task ${task.id}`); return undefined; } - const date = new Date(dateStr); - if (isNaN(date.getTime())) { - console.log(`${fieldName} parsed to invalid date`); + try { + const date = new Date(dateStr); + if (isNaN(date.getTime())) { + console.log(`${fieldName} parsed to invalid date for task ${task.id}`); + return undefined; + } + + console.log(`${fieldName} successfully parsed to: ${date.toISOString()} for task ${task.id}`); + return date; + } catch (error) { + console.error(`Error parsing ${fieldName} for task ${task.id}:`, error); return undefined; } - - console.log(`${fieldName} successfully parsed to:`, date.toISOString()); - return date; }; // Try each date field in order of priority - let date: Date | undefined; + const dateToFinish = tryParseDate(task.dateToFinish, 'dateToFinish'); + if (dateToFinish) { + console.log(`Using dateToFinish for task ${task.id}`); + return dateToFinish; + } - date = tryParseDate(task.dateToFinish, 'dateToFinish'); - if (date) return date; + const editTo = tryParseDate(task.editTo, 'editTo'); + if (editTo) { + console.log(`Using editTo for task ${task.id}`); + return editTo; + } - date = tryParseDate(task.editTo, 'editTo'); - if (date) return date; + const editFrom = tryParseDate(task.editFrom, 'editFrom'); + if (editFrom) { + console.log(`Using editFrom for task ${task.id}`); + return editFrom; + } - date = tryParseDate(task.editFrom, 'editFrom'); - if (date) return date; - - date = tryParseDate(task.date, 'date'); - if (date) return date; + const date = tryParseDate(task.date, 'date'); + if (date) { + console.log(`Using date for task ${task.id}`); + return date; + } - console.log('No valid date found for task:', task.id); + console.log(`No valid date found for task ${task.id}`); return undefined; }; - // Sort tasks by date - const sortedTasks = data.tasks - .map((task: Task): TaskWithDate => { - console.log(`\nProcessing task ${task.id} - ${task.headline}`); - console.log('Raw task data:', { - dateToFinish: task.dateToFinish, - editTo: task.editTo, - editFrom: task.editFrom, - date: task.date - }); - - const validDate = getValidDate(task); - console.log('Final valid date:', validDate?.toISOString() || 'NO DATE'); - - return { - ...task, - validDate - }; - }) - .sort((a: TaskWithDate, b: TaskWithDate) => { - // If both tasks have dates, sort by date (oldest first) - if (a.validDate && b.validDate) { - return a.validDate.getTime() - b.validDate.getTime(); - } - // Put tasks without dates at the end and sort by ID (newest first) - if (!a.validDate && !b.validDate) { - return b.id - a.id; - } - // Tasks with dates come before tasks without dates - return a.validDate ? -1 : 1; - }); + // Process and sort tasks + const processedTasks = data.tasks.map((task: Task): TaskWithDate => { + const validDate = getValidDate(task); + console.log(`Final date for task ${task.id}:`, validDate?.toISOString() || 'NO DATE'); + return { ...task, validDate }; + }); - console.log('\nFinal sorted tasks:', sortedTasks.map((t: TaskWithDate) => ({ + // Sort tasks + const sortedTasks = processedTasks.sort((a: TaskWithDate, b: TaskWithDate) => { + if (a.validDate && b.validDate) { + return a.validDate.getTime() - b.validDate.getTime(); + } + if (!a.validDate && !b.validDate) { + return b.id - a.id; + } + return a.validDate ? -1 : 1; + }); + + console.log('Final sorted tasks:', sortedTasks.map((t: TaskWithDate) => ({ id: t.id, headline: t.headline, validDate: t.validDate?.toISOString(), - rawDates: { + dates: { dateToFinish: t.dateToFinish, editTo: t.editTo, editFrom: t.editFrom,