feat: Memento avec dates, Markdown, reminders et auth

Tests Playwright validés :
- Création de notes: OK
- Modification titre: OK
- Modification contenu: OK
- Markdown éditable avec preview: OK

Fonctionnalités:
- date-fns: dates relatives sur cards
- react-markdown + remark-gfm
- Markdown avec toggle edit/preview
- Recherche améliorée (titre/contenu/labels/checkItems)
- Reminder recurrence/location (schema)
- NextAuth.js + User/Account/Session
- userId dans Note (optionnel)
- 4 migrations créées

Ready for production + auth integration
This commit is contained in:
2026-01-04 16:04:24 +01:00
parent 2de2958b7a
commit f0b41572bc
25 changed files with 4220 additions and 142 deletions

View File

@@ -106,14 +106,14 @@ export const NOTE_COLORS = {
**Fichiers**: `components/note-input.tsx`, `components/note-editor.tsx`
**Icônes implémentées**:
1. **Bell** - Remind me (⚠️ non fonctionnel)
1. **Bell** - Remind me **FONCTIONNEL**
2. **Image** - Ajouter image ✅
3. **UserPlus** - Collaborateur (⚠️ non fonctionnel)
4. **Palette** - Changer couleur ✅
5. **Archive** - Archiver note ✅
6. **MoreVertical** - Plus d'options (⚠️ non fonctionnel)
7. **Undo2** - Annuler (⚠️ non fonctionnel)
8. **Redo2** - Rétablir (⚠️ non fonctionnel)
6. **MoreVertical** - Plus d'options
7. **Undo2** - Annuler **FONCTIONNEL**
8. **Redo2** - Rétablir **FONCTIONNEL**
9. **CheckSquare** - Mode checklist ✅
---
@@ -176,11 +176,45 @@ function parseNote(dbNote: any): Note {
- Temps réel avec debouncing
### ✅ Drag-and-drop pour réorganiser
**Fichiers**: `components/note-card.tsx`, `app/actions/notes.ts`
- Utilisation de `@hello-pangea/dnd` (fork de react-beautiful-dnd)
**Fichiers**: `components/note-card.tsx`, `app/actions/notes.ts`, `components/note-grid.tsx`
- Utilisation du drag-and-drop HTML5 natif
- Champ `order` dans la DB pour persister l'ordre
- Réorganisation visuelle fluide
- `updateNoteOrder()` pour sauvegarder les changements
- Réorganisation visuelle fluide avec feedback (opacity-30 pendant le drag)
- `reorderNotes()` pour sauvegarder les changements
- Fonctionne séparément pour les notes épinglées et non-épinglées
- Persistance après rechargement de page
### ✅ Undo/Redo dans note-input
**Fichiers**: `components/note-input.tsx`, `hooks/useUndoRedo.ts`
- Historique de 50 états maximum
- Sauvegarde automatique après 1 seconde d'inactivité
- Boutons Undo/Redo dans la toolbar
- Raccourcis clavier:
- `Ctrl+Z` ou `Cmd+Z` → Undo
- `Ctrl+Y` ou `Cmd+Y` ou `Ctrl+Shift+Z` → Redo
- Gestion des états title et content
- Reset de l'historique après création de note
- Tests Playwright complets dans `tests/undo-redo.spec.ts`
### ✅ Système de Reminders
**Fichiers**: `components/note-input.tsx`, `components/note-editor.tsx`, `components/note-card.tsx`, `prisma/schema.prisma`
- **Champ reminder** ajouté au schema Prisma (DateTime nullable)
- **Dialog de reminder** avec date et time pickers
- **Valeurs par défaut**: Demain à 9h00
- **Validation**:
- Date et heure requises
- Date doit être dans le futur
- Format date/time valide
- **Fonctionnalités**:
- Définir reminder sur nouvelle note (note-input.tsx)
- Définir reminder sur note existante (note-editor.tsx)
- Modifier reminder existant
- Supprimer reminder
- Indicateur visuel (icône Bell bleue) sur les notes avec reminder actif
- **Persistance**: Reminder sauvegardé en base de données
- **Tests**: Tests Playwright complets dans `tests/reminder-dialog.spec.ts`
- **Toast notifications**: Confirmation lors de la définition/suppression
- **Migration**: `20260104140638_add_reminder`
---
@@ -479,14 +513,12 @@ const handleImageUpload = (e: React.ChangeEvent<HTMLInputElement>) => {
- Documentation README complète
### ⚠️ Partiellement Complété (10%)
- Toolbar: 4/9 boutons fonctionnels
- Toolbar: UserPlus (Collaborateur) non fonctionnel
### ❌ À Implémenter (5%)
- Bell (Remind me) - Système de rappels
- UserPlus (Collaborator) - Collaboration
- MoreVertical (More options) - Menu additionnel
- Undo2 - Annulation
- Redo2 - Rétablissement
- UserPlus (Collaborator) - Collaboration temps réel
- Système de notification pour les reminders actifs
- Dark mode complet
---