working leantime widget 116

This commit is contained in:
Alma 2025-04-12 22:49:18 +02:00
parent c31bc704d8
commit 117a75eecb
2 changed files with 24 additions and 64 deletions

View File

@ -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,

View File

@ -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');