From 4e9d06896dfb104a2e23f05da2fbcf504f5301cd Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Thu, 25 Sep 2025 22:39:21 +0200 Subject: [PATCH] feat: enhance Kanban navigation and task editing - Updated `KanbanPageClient` to retrieve `taskId` from URL search parameters for direct task editing. - Modified links in `DailyCheckboxItem` and `PendingTasksSection` to navigate to the Kanban page with the corresponding `taskId`, improving user experience by allowing quick access to task details. - Added logic in `KanbanBoardContainer` to automatically open the edit modal if a `taskId` is present, streamlining the editing process. --- src/app/kanban/KanbanPageClient.tsx | 4 ++++ src/components/daily/DailyCheckboxItem.tsx | 2 +- src/components/daily/PendingTasksSection.tsx | 8 ++++++-- src/components/kanban/BoardContainer.tsx | 16 ++++++++++++++-- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/app/kanban/KanbanPageClient.tsx b/src/app/kanban/KanbanPageClient.tsx index a8f19b5..151f7a3 100644 --- a/src/app/kanban/KanbanPageClient.tsx +++ b/src/app/kanban/KanbanPageClient.tsx @@ -1,6 +1,7 @@ 'use client'; import { useState } from 'react'; +import { useSearchParams } from 'next/navigation'; import { KanbanBoardContainer } from '@/components/kanban/BoardContainer'; import { Header } from '@/components/ui/Header'; import { TasksProvider, useTasksContext } from '@/contexts/TasksContext'; @@ -25,6 +26,8 @@ function KanbanPageContent() { const { preferences, updateViewPreferences } = useUserPreferences(); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const isMobile = useIsMobile(768); // Tailwind md breakpoint + const searchParams = useSearchParams(); + const taskIdFromUrl = searchParams.get('taskId'); // Extraire les préférences du context const showFilters = preferences.viewPreferences.showFilters; @@ -190,6 +193,7 @@ function KanbanPageContent() { diff --git a/src/components/daily/DailyCheckboxItem.tsx b/src/components/daily/DailyCheckboxItem.tsx index d3f80e6..1978465 100644 --- a/src/components/daily/DailyCheckboxItem.tsx +++ b/src/components/daily/DailyCheckboxItem.tsx @@ -128,7 +128,7 @@ export function DailyCheckboxItem({ {/* Lien vers la tâche si liée */} {checkbox.task && ( diff --git a/src/components/daily/PendingTasksSection.tsx b/src/components/daily/PendingTasksSection.tsx index 039a030..512a6a9 100644 --- a/src/components/daily/PendingTasksSection.tsx +++ b/src/components/daily/PendingTasksSection.tsx @@ -1,6 +1,7 @@ 'use client'; import { useState, useEffect, useCallback, useTransition } from 'react'; +import Link from 'next/link'; import { Card, CardHeader, CardContent } from '@/components/ui/Card'; import { Button } from '@/components/ui/Button'; import { DailyCheckbox, DailyCheckboxType } from '@/lib/types'; @@ -225,9 +226,12 @@ export function PendingTasksSection({ `Il y a ${daysAgo} jours`} {task.task && ( - + 🔗 {task.task.title} - + )} diff --git a/src/components/kanban/BoardContainer.tsx b/src/components/kanban/BoardContainer.tsx index ed5c437..acc7b4f 100644 --- a/src/components/kanban/BoardContainer.tsx +++ b/src/components/kanban/BoardContainer.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState } from 'react'; +import { useState, useEffect } from 'react'; import { EditTaskForm } from '@/components/forms/EditTaskForm'; import { useTasksContext } from '@/contexts/TasksContext'; import { useUserPreferences } from '@/contexts/UserPreferencesContext'; @@ -14,11 +14,13 @@ import { BoardRouter } from './BoardRouter'; interface KanbanBoardContainerProps { showFilters?: boolean; showObjectives?: boolean; + initialTaskIdToEdit?: string | null; } export function KanbanBoardContainer({ showFilters = true, - showObjectives = true + showObjectives = true, + initialTaskIdToEdit = null }: KanbanBoardContainerProps = {}) { const { filteredTasks, @@ -37,6 +39,16 @@ export function KanbanBoardContainer({ const visibleStatuses = allStatuses.filter(status => isColumnVisible(status.key)).map(s => s.key); const [editingTask, setEditingTask] = useState(null); + // Effet pour ouvrir automatiquement la popup d'édition si un taskId est fourni dans l'URL + useEffect(() => { + if (initialTaskIdToEdit && filteredTasks.length > 0) { + const taskToEdit = filteredTasks.find(task => task.id === initialTaskIdToEdit); + if (taskToEdit) { + setEditingTask(taskToEdit); + } + } + }, [initialTaskIdToEdit, filteredTasks]); + const handleEditTask = (task: Task) => { setEditingTask(task); };