diff --git a/app/api/leantime/tasks/route.ts b/app/api/leantime/tasks/route.ts index 25829930..9f874d97 100644 --- a/app/api/leantime/tasks/route.ts +++ b/app/api/leantime/tasks/route.ts @@ -186,7 +186,8 @@ export async function GET(request: NextRequest) { projectName: task.projectName, projectId: task.projectId, status: task.status, - dueDate: task.dateToFinish || null, + dateToFinish: task.dateToFinish || null, + date: task.date || null, milestone: task.type || null, details: task.description || null, createdOn: task.dateCreated, diff --git a/components/flow.tsx b/components/flow.tsx index 2dc981f6..94ccce38 100644 --- a/components/flow.tsx +++ b/components/flow.tsx @@ -80,83 +80,42 @@ export function Flow() { } }; + const getValidDate = (task: Task): string | null => { + // Only use dateToFinish + if (task.dateToFinish && task.dateToFinish !== '0000-00-00 00:00:00') { + return task.dateToFinish; + } + return null; + }; + const fetchTasks = async () => { setLoading(true); try { const response = await fetch('/api/leantime/tasks'); - if (!response.ok) { - throw new Error('Failed to fetch tasks'); - } const data = await response.json(); - if (!data.tasks || !Array.isArray(data.tasks)) { + if (!Array.isArray(data)) { console.warn('No tasks found in response', data as unknown); setTasks([]); return; } - // Log raw task data for debugging - console.log('Raw task data:', data.tasks.map((t: Task) => ({ - id: t.id, - headline: t.headline, - dateToFinish: t.dateToFinish, - status: t.status - }))); - - // Process tasks - exclude completed tasks and get valid dates - const processedTasks = data.tasks - .filter((task: Task) => task.status !== 5) // Exclude completed tasks - .map((task: Task): TaskWithDate => { - let validDate: Date | undefined; + // Filter out completed tasks (status 3) and sort by dateToFinish + const sortedTasks = data + .filter((task: Task) => task.status !== 3) + .sort((a: Task, b: Task) => { + const dateA = getValidDate(a); + const dateB = getValidDate(b); - // Only use dateToFinish - if (task.dateToFinish) { - console.log(`Processing task ${task.id} - ${task.headline}:`, { - rawDateToFinish: task.dateToFinish, - isZeroDate: task.dateToFinish === '0000-00-00 00:00:00' - }); - - if (task.dateToFinish !== '0000-00-00 00:00:00') { - const dateToFinish = new Date(task.dateToFinish); - if (!isNaN(dateToFinish.getTime())) { - validDate = dateToFinish; - console.log(`Valid date found for task ${task.id}:`, dateToFinish.toISOString()); - } else { - console.warn(`Invalid date format for task ${task.id}:`, task.dateToFinish); - } - } - } - - return { ...task, validDate }; + if (!dateA && !dateB) return 0; + if (!dateA) return 1; + if (!dateB) return -1; + + return new Date(dateA).getTime() - new Date(dateB).getTime(); }); - // Sort tasks: first by status (4 before 3), then by date - const sortedTasks = processedTasks.sort((a: TaskWithDate, b: TaskWithDate) => { - // First sort by status (4 before 3) - if (a.status !== b.status) { - return b.status - a.status; - } - - // Then sort by date - if (a.validDate && b.validDate) { - return a.validDate.getTime() - b.validDate.getTime(); - } - if (a.validDate) return -1; - if (b.validDate) return 1; - return 0; - }); - - // Take first 12 tasks - const finalTasks = sortedTasks.slice(0, 12); - console.log('Final tasks to display:', finalTasks.map((t: TaskWithDate) => ({ - id: t.id, - headline: t.headline, - status: t.status, - dateToFinish: t.dateToFinish, - validDate: t.validDate?.toISOString() - }))); - - setTasks(finalTasks); + console.log('Sorted tasks by dateToFinish:', sortedTasks); + setTasks(sortedTasks.slice(0, 6)); } catch (error) { console.error('Error fetching tasks:', error); setError('Failed to fetch tasks');