## Bug Fixes ### Note Card Actions - Fix broken size change functionality (missing state declaration) - Implement React 19 useOptimistic for instant UI feedback - Add startTransition for non-blocking updates - Ensure smooth animations without page refresh - All note actions now work: pin, archive, color, size, checklist ### Markdown LaTeX Rendering - Add remark-math and rehype-katex plugins - Support inline equations with dollar sign syntax - Support block equations with double dollar sign syntax - Import KaTeX CSS for proper styling - Equations now render correctly instead of showing raw LaTeX ## Technical Details - Replace undefined currentNote references with optimistic state - Add optimistic updates before server actions for instant feedback - Use router.refresh() in transitions for smart cache invalidation - Install remark-math, rehype-katex, and katex packages ## Testing - Build passes successfully with no TypeScript errors - Dev server hot-reloads changes correctly
11 KiB
Epic: Implémentation Complète de la Fonctionnalité Collaborateurs
Epic ID: EPIC-COLLABORATORS Status: Draft Priority: High Created: 2026-01-09 Owner: Development Team Type: Feature Implementation
Description du Problème
Symptôme
Le bouton "Collaborator" (icône UserPlus) est grisé et désactivé dans note-input, et ne fonctionne pas non plus sur les notes existantes.
Contexte
- L'utilisateur veut pouvoir ajouter des collaborateurs à ses notes
- Actuellement: bouton grisé dans note-input, fonctionnalité non testée sur notes existantes
- Les tests de la collaborator dialog n'ont pas été faits
User Stories
Story 1: Sélectionner des Collaborateurs lors de la Création de Note
ID: COLLAB-1 Title: Permettre d'ajouter des collaborateurs pendant la création d'une note Priority: Must Have Estimation: 3h
En tant que: utilisateur Je veux: pouvoir sélectionner des collaborateurs AVANT de créer ma note Afin que: la note soit partagée dès sa création avec les bonnes personnes
Critères d'Acceptation:
- Given une nouvelle note en cours de création (note-input)
- When je clique sur le bouton collaborateur (UserPlus)
- Then une boîte de dialogue s'ouvre
- And je peux chercher des utilisateurs par email
- And je peux ajouter plusieurs collaborateurs
- Given que j'ai sélectionné des collaborateurs
- When je crée la note (bouton "Add")
- Then la note est créée avec les collaborateurs déjà assignés
- And les collaborateurs reçoivent une notification (si implémenté)
Fichiers à Modifier:
keep-notes/components/note-input.tsx- Ajouter étatcollaborators: string[]keep-notes/components/note-input.tsx- Rendre le bouton collaborateur actifkeep-notes/components/note-input.tsx- Intégrer CollaboratorDialogkeep-notes/app/actions/notes.ts- ModifiercreateNotepour acceptersharedWith
Implémentation:
// Dans note-input.tsx
const [collaborators, setCollaborators] = useState<string[]>([])
const [showCollaboratorDialog, setShowCollaboratorDialog] = useState(false)
// Dans handleSubmit
await createNote({
// ... autres champs
sharedWith: collaborators.length > 0 ? collaborators : undefined,
})
Story 2: Vérifier le Fonctionnement sur Notes Existantes
ID: COLLAB-2 Title: Tester et corriger l'ajout de collaborateurs sur les notes existantes Priority: Must Have Estimation: 2h
En tant que: utilisateur Je veux: pouvoir partager une note existante avec d'autres utilisateurs Afin que: nous puissions collaborer sur une note déjà créée
Critères d'Acceptation:
- Given une note existante affichée
- When je clique sur les trois points (⋮) → "Share with collaborators"
- Then la boîte de dialogue CollaboratorDialog s'ouvre
- And je vois la liste des collaborateurs actuels
- Given la boîte de dialogue ouverte
- When j'entre un email et clique "Invite"
- Then l'utilisateur est ajouté aux collaborateurs
- And il apparaît dans la liste avec son nom/avatar
- And je peux le retirer avec le bouton X
Fichiers à Modifier:
keep-notes/components/note-card.tsx- Déjà intégré, à testerkeep-notes/components/collaborator-dialog.tsx- Déjà créé, à testerkeep-notes/app/actions/notes.ts- Actions déjà créées, à tester
Tests Nécessaires:
- Test E2E: Ouvrir une note → Menu → Share → Ajouter collaborateur
- Test E2E: Vérifier que le collaborateur apparaît dans la liste
- Test E2E: Vérifier qu'on peut retirer un collaborateur
Story 3: Afficher les Collaborateurs sur la Note Card
ID: COLLAB-3 Title: Afficher les avatars des collaborateurs sur les notes partagées Priority: Should Have Estimation: 2h
En tant que: utilisateur Je veux: voir quels collaborateurs ont accès à une note Afin que: je sache qui peut voir et éditer mes notes
Critères d'Acceptation:
- Given une note qui a des collaborateurs
- When la note est affichée
- Then je vois les avatars des collaborateurs en bas de la note
- And les avatars sont petits (20-24px) et disposés horizontalement
- Given que je survole un avatar
- When je passe la souris dessus
- Then le nom complet de l'utilisateur apparaît en tooltip
- And un badge "Owner" distingue le propriétaire
Fichiers à Modifier:
keep-notes/components/note-card.tsx- Afficher les avatarskeep-notes/components/note-card.tsx- RécupérersharedWithdepuis la note
Implémentation:
// Dans note-card.tsx, après les labels:
{note.sharedWith && note.sharedWith.length > 0 && (
<div className="flex items-center gap-1 mt-2">
{note.sharedWith.map(userId => (
<CollaboratorAvatar key={userId} userId={userId} />
))}
</div>
)}
Story 4: Voir les Notes Partagées avec Moi
ID: COLLAB-4 Title: Afficher une liste de notes que d'autres utilisateurs ont partagées avec moi Priority: Should Have Estimation: 3h
En tant que: utilisateur Je veux: voir les notes que d'autres personnes ont partagées avec moi Afin que: je puisse accéder aux notes collaboratives
Critères d'Acceptation:
- Given que des utilisateurs m'ont partagé des notes
- When j'accède à la page principale
- Then les notes partagées apparaissent mélangées avec mes notes
- And un badge "Shared by X" indique le propriétaire
- Given une note partagée
- When je la regarde
- Then je peux voir qui m'a partagé cette note
- And l'avatar du propriétaire est visible
Fichiers à Modifier:
keep-notes/app/actions/notes.ts-getAllNotes()existe déjàkeep-notes/app/(main)/page.tsx- UtilisergetAllNotes()au lieu degetNotes()
Note: L'action getAllNotes() existe déjà et combine notes propres + notes partagées !
Story 5: Gérer les Permissions - Lecture vs Écriture
ID: COLLAB-5 Title: Implémenter des permissions de lecture et d'édition Priority: Could Have (Future) Estimation: 4h
En tant que: propriétaire d'une note Je veux: choisir si les collaborateurs peuvent seulement voir ou aussi éditer Afin que: je puisse contrôler qui peut modifier mes notes
Critères d'Acceptation:
- Given une note avec des collaborateurs
- When j'ajoute un collaborateur
- Then je peux choisir le permission: "Can view" ou "Can edit"
- Given un collaborateur avec "Can view"
- When il ouvre la note
- Then il peut voir le contenu mais PAS modifier
- Given un collaborateur avec "Can edit"
- When il modifie la note
- Then les modifications sont sauvegardées
Fichiers à Modifier:
keep-notes/prisma/schema.prisma- Ajouter tableNoteCollaboratoravec permissionskeep-notes/app/actions/notes.ts- Vérifier les permissions avant updatekeep-notes/components/collaborator-dialog.tsx- Ajouter sélecteur de permission
Note: Story à implémenter plus tard, complexité élevée.
Story 6: Notification quand On Partage une Note
ID: COLLAB-6 Title: Envoyer une notification (email/IN-APP) quand on est ajouté comme collaborateur Priority: Could Have Estimation: 3h
En tant que: collaborateur Je veux: recevoir une notification quand quelqu'un partage une note avec moi Afin que: je sois au courant que j'ai accès à de nouvelles notes
Critères d'Acceptation:
- Given qu'un utilisateur partage une note avec moi
- When la note est partagée
- Then je reçois une notification email
- And l'email contient: le titre de la note, le propriétaire, un lien
- Given que je suis connecté à l'application
- When on partage une note avec moi
- Then une notification in-app apparaît
- And je peux cliquer pour voir la note
Fichiers à Modifier:
keep-notes/app/actions/notes.ts- Envoyer email aprèsaddCollaborator()keep-notes/lib/mail.ts- Template email pour partagekeep-notes/components/notifications.tsx- Système de notifications in-app (nouveau)
Story 7: Filtrer/Afficher Seulement les Notes Partagées
ID: COLLAB-7 Title: Ajouter une vue "Shared with me" pour voir uniquement les notes collaboratives Priority: Should Have Estimation: 2h
En tant que: utilisateur Je veux: pouvoir filtrer pour voir uniquement les notes partagées avec moi Afin que: je puisse me concentrer sur la collaboration
Critères d'Acceptation:
- Given que j'ai des notes partagées
- When je clique sur un filtre "Shared with me"
- Then seules les notes partagées par d'autres s'affichent
- And mes notes personnelles sont masquées
- Given le filtre actif
- When je le désactive
- Then toutes les notes réapparaissent
Fichiers à Modifier:
keep-notes/components/sidebar.tsx- Ajouter "Shared with me"keep-notes/app/actions/notes.ts- CréergetSharedNotesOnly()
Story 8: Tests E2E Complets pour Collaborateurs
ID: COLLAB-8 Title: Créer une suite de tests E2E pour valider le système de collaboration Priority: Should Have Estimation: 4h
En tant que: QA / Développeur Je veux: des tests automatisés pour valider toutes les fonctionnalités de collaboration Afin que: nous puissions détecter les régressions
Critères d'Acceptation:
- Tests pour ajouter collaborateur lors de la création
- Tests pour ajouter collaborateur sur note existante
- Tests pour retirer un collaborateur
- Tests pour voir les notes partagées
- Tests pour vérifier que les non-collaborateurs ne peuvent pas accéder
- Tests pour les permissions (si implémenté)
Fichiers à Modifier:
keep-notes/tests/collaboration.spec.ts- Nouveau fichier
Ordre d'Implémentation
Sprint 1 (Fonctionnalités de base - AUJOURD'HUI):
- ✅ COLLAB-1: Permettre la sélection lors de la création (Must Have)
- ✅ COLLAB-2: Tester et corriger sur notes existantes (Must Have)
Sprint 2 (Améliorations UX):
3. COLLAB-3: Afficher les avatars sur les notes
4. COLLAB-4: Afficher les notes partagées (déjà fait avec getAllNotes())
Sprint 3 (Futures): 5. COLLAB-5: Permissions lecture/écriture 6. COLLAB-6: Notifications 7. COLLAB-7: Filtre "Shared with me" 8. COLLAB-8: Tests E2E
Fichers à Modifier
Critiques
keep-notes/components/note-input.tsx- Activer le bouton et gérer les collaborateurskeep-notes/components/note-card.tsx- Tester la dialogkeep-notes/components/collaborator-dialog.tsx- Tester le composant
Secondaires
keep-notes/app/actions/notes.ts-createNotepour acceptersharedWithkeep-notes/lib/types.ts- Assurer que Note a biensharedWith
Tests de Validation
Scénario 1: Création avec Collaborateurs
1. Cliquer sur "Take a note..."
2. Taper du contenu
3. Cliquer sur le bouton collaborateur (UserPlus)
4. Entrer un email existant
5. Cliquer "Invite"
6. Vérifier que l'utilisateur apparaît dans la liste
7. Cliquer "Add" pour créer la note
8. Vérifier que la note est créée avec le collaborateur
Scénario 2: Note Existante
1. Ouvrir une note existante
2. Cliquer sur (⋮) → "Share with collaborators"
3. Ajouter un collaborateur
4. Vérifier qu'il peut voir la note
Document Version: 1.0 Last Updated: 2026-01-09 Priority: High - Bouton grisé à corriger URGENTEMENT