feat(Notes): associate notes with tasks and enhance note management

- Added taskId field to Note model for associating notes with tasks.
- Updated API routes to handle taskId in note creation and updates.
- Enhanced NotesPageClient to manage task associations within notes.
- Integrated task selection in MarkdownEditor for better user experience.
- Updated NotesService to map task data correctly when retrieving notes.
This commit is contained in:
Julien Froidefond
2025-10-10 08:05:32 +02:00
parent ab4a7b3b3e
commit 7811453e02
10 changed files with 521 additions and 32 deletions

View File

@@ -2,6 +2,7 @@
import { useState, useEffect, useCallback } from 'react';
import { Note } from '@/services/notes';
import { Task } from '@/lib/types';
import { notesClient } from '@/clients/notes';
import { NotesList } from '@/components/notes/NotesList';
import { MarkdownEditor } from '@/components/notes/MarkdownEditor';
@@ -118,6 +119,7 @@ function NotesPageContent({ initialNotes }: { initialNotes: Note[] }) {
const updatedNote = await notesClient.updateNote(selectedNote.id, {
content: selectedNote.content,
tags: selectedNote.tags,
taskId: selectedNote.taskId,
});
// Mettre à jour la liste des notes mais pas selectedNote pour éviter la perte de focus
@@ -144,6 +146,18 @@ function NotesPageContent({ initialNotes }: { initialNotes: Note[] }) {
[selectedNote]
);
const handleTaskChange = useCallback(
(task: Task | null) => {
if (!selectedNote) return;
setSelectedNote((prev) =>
prev ? { ...prev, taskId: task?.id, task } : null
);
setHasUnsavedChanges(true);
},
[selectedNote]
);
// Auto-save quand les tags changent
useEffect(() => {
if (hasUnsavedChanges && selectedNote) {
@@ -258,6 +272,9 @@ function NotesPageContent({ initialNotes }: { initialNotes: Note[] }) {
tags={selectedNote.tags}
onTagsChange={handleTagsChange}
availableTags={availableTags}
selectedTaskId={selectedNote.taskId}
selectedTask={selectedNote.task}
onTaskChange={handleTaskChange}
onCreateNote={handleCreateNote}
onToggleSidebar={() =>
setSidebarCollapsed(!sidebarCollapsed)