From bbca93c4bed4d8747dbd1fd58a1fae45b917694a Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sat, 9 May 2026 15:18:44 +0000 Subject: [PATCH] feat: add reminder and move-to-notebook actions to editorial note menu - Add Bell/reminder item to EditorialNoteMenu (notes-editorial-view.tsx) - Add FolderOpen submenu for moving notes between notebooks - Import ReminderDialog, useNotebooks, DropdownMenuSub components - Fix settings/general/page.tsx to pass only required props to GeneralSettingsClient Co-Authored-By: Claude Opus 4.7 --- .../app/(main)/settings/general/page.tsx | 13 +++- .../components/notes-editorial-view.tsx | 70 ++++++++++++++++++- 2 files changed, 79 insertions(+), 4 deletions(-) diff --git a/memento-note/app/(main)/settings/general/page.tsx b/memento-note/app/(main)/settings/general/page.tsx index 33760d1..e99de12 100644 --- a/memento-note/app/(main)/settings/general/page.tsx +++ b/memento-note/app/(main)/settings/general/page.tsx @@ -9,7 +9,16 @@ export default async function GeneralSettingsPage() { redirect('/api/auth/signin') } - const settings = await getAISettings() + const { + preferredLanguage, + emailNotifications, + desktopNotifications, + autoSave, + } = await getAISettings() - return + return ( + + ) } diff --git a/memento-note/components/notes-editorial-view.tsx b/memento-note/components/notes-editorial-view.tsx index c0a3f14..2598d84 100644 --- a/memento-note/components/notes-editorial-view.tsx +++ b/memento-note/components/notes-editorial-view.tsx @@ -6,7 +6,7 @@ import { getNoteFeedImage, getNotePlainExcerpt, getNoteDisplayTitle } from '@/li import { useLanguage } from '@/lib/i18n' import { useRefresh } from '@/lib/use-refresh' import { motion, AnimatePresence } from 'motion/react' -import { ChevronRight, MoreHorizontal, Trash2, Archive, Pin, History, Pencil, Sparkles, Loader2 } from 'lucide-react' +import { ChevronRight, MoreHorizontal, Trash2, Archive, Pin, History, Pencil, Sparkles, Loader2, Bell, FolderOpen, StickyNote } from 'lucide-react' import { useSession } from 'next-auth/react' import { getAISettings } from '@/app/actions/ai-settings' import { generateNoteIllustrationSvg } from '@/app/actions/note-illustration' @@ -16,8 +16,13 @@ import { DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, + DropdownMenuSub, + DropdownMenuSubContent, + DropdownMenuSubTrigger, } from '@/components/ui/dropdown-menu' -import { deleteNote, toggleArchive, togglePin } from '@/app/actions/notes' +import { deleteNote, toggleArchive, togglePin, updateNote } from '@/app/actions/notes' +import { ReminderDialog } from '@/components/reminder-dialog' +import { useNotebooks } from '@/context/notebooks-context' import { toast } from 'sonner' type NotesEditorialViewProps = { @@ -43,7 +48,10 @@ function EditorialNoteMenu({ note, onOpen, onOpenHistory }: { }) { const { t } = useLanguage() const { refreshNotes } = useRefresh() + const { notebooks } = useNotebooks() const [, startTransition] = useTransition() + const [showReminder, setShowReminder] = useState(false) + const [showNotebookMenu, setShowNotebookMenu] = useState(false) const handleDelete = (e: React.MouseEvent) => { e.stopPropagation() @@ -83,6 +91,18 @@ function EditorialNoteMenu({ note, onOpen, onOpenHistory }: { }) } + const handleMoveToNotebook = (notebookId: string | null) => { + startTransition(async () => { + try { + await updateNote(note.id, { notebookId }) + refreshNotes(note?.notebookId) + toast.success(t('notebookSuggestion.movedToNotebook') || 'Note déplacée') + } catch { + toast.error(t('general.error')) + } + }) + } + return ( e.stopPropagation()}> @@ -109,6 +129,52 @@ function EditorialNoteMenu({ note, onOpen, onOpenHistory }: { {t('notes.history') || 'Historique'} )} + + {/* Rappel */} + { e.stopPropagation(); setShowReminder(true) }}> + + {note.reminder ? (t('reminder.changeReminder') || 'Modifier le rappel') : (t('reminder.setReminder') || 'Définir un rappel')} + + { + startTransition(async () => { + await updateNote(note.id, { reminder: date }) + refreshNotes(note?.notebookId) + setShowReminder(false) + }) + }} + onRemove={() => { + startTransition(async () => { + await updateNote(note.id, { reminder: null }) + refreshNotes(note?.notebookId) + setShowReminder(false) + }) + }} + /> + + {/* Déplacer vers notebook */} + + e.stopPropagation()}> + + {t('notebookSuggestion.moveToNotebook') || 'Déplacer vers notebook'} + + + { e.stopPropagation(); handleMoveToNotebook(null) }}> + + {t('notebookSuggestion.generalNotes') || 'Notes générales'} + + {notebooks.map((nb: any) => ( + { e.stopPropagation(); handleMoveToNotebook(nb.id) }}> + + {nb.name} + + ))} + + +