# 🎹 FonctionnalitĂ© : Modification de la couleur des calendriers de groupes ## 📋 Vue d'ensemble Cette fonctionnalitĂ© permet aux membres d'un groupe de personnaliser la couleur de la pastille du calendrier associĂ© Ă  leur groupe. Chaque groupe créé possĂšde un calendrier automatique nommĂ© `"Groupe: {nom}"`, et cette couleur est visible dans tous les affichages de calendrier (agenda, vision, etc.). ## ✹ FonctionnalitĂ©s implĂ©mentĂ©es ### 1. **API Backend** (`/app/api/groups/[groupId]/calendar/route.ts`) #### Nouveaux endpoints : **GET `/api/groups/[groupId]/calendar`** - RĂ©cupĂšre le calendrier associĂ© Ă  un groupe - Retourne l'objet calendrier avec sa couleur actuelle **PATCH `/api/groups/[groupId]/calendar`** - Modifie uniquement la couleur du calendrier d'un groupe - Body : `{ "color": "#FF5733" }` - Validation du format hexadĂ©cimal - VĂ©rification que l'utilisateur est membre du groupe - Retourne le calendrier mis Ă  jour #### SĂ©curitĂ© : - ✅ Authentification requise - ✅ VĂ©rification de l'appartenance au groupe via Keycloak - ✅ Validation du format de couleur (hex : `#RRGGBB` ou `#RGB`) --- ### 2. **Interface utilisateur - Page Groupes** (`/components/groups/groups-table.tsx`) #### Modifications : 1. **Affichage de la pastille de couleur** - Chaque groupe affiche maintenant une pastille colorĂ©e Ă  cĂŽtĂ© de son nom - Couleur par dĂ©faut : `#4f46e5` (indigo) 2. **Nouveau bouton "Couleur du calendrier"** - Accessible via le menu actions (icĂŽne ⋯) - IcĂŽne palette (🎹) 3. **Dialog de sĂ©lection de couleur** - Palette de 16 couleurs prĂ©dĂ©finies - Input manuel pour code hexadĂ©cimal - Aperçu en temps rĂ©el de la couleur sĂ©lectionnĂ©e - Validation avant sauvegarde #### Palette de couleurs disponibles : ```typescript const colorPalette = [ "#4f46e5", // Indigo "#0891b2", // Cyan "#0e7490", // Teal "#16a34a", // Green "#65a30d", // Lime "#ca8a04", // Amber "#d97706", // Orange "#dc2626", // Red "#e11d48", // Rose "#9333ea", // Purple "#7c3aed", // Violet "#2563eb", // Blue "#0284c7", // Sky "#059669", // Emerald "#84cc16", // Lime "#eab308", // Yellow ]; ``` --- ### 3. **Interface utilisateur - Page Missions/Équipe** (`/app/missions/equipe/page.tsx`) #### Modifications identiques Ă  GroupsTable : 1. **Affichage de la couleur** - IcĂŽne du groupe (đŸ‘„) affichĂ©e sur fond de la couleur du calendrier - Texte en blanc pour meilleure lisibilitĂ© 2. **Bouton direct dans la table** - IcĂŽne palette (🎹) directement dans les actions - Tooltip "Couleur du calendrier" 3. **Dialog de sĂ©lection** - MĂȘme interface que dans GroupsTable - Sauvegarde avec loader pendant l'opĂ©ration --- ## 🔄 Flux de donnĂ©es ### Chargement initial : ``` 1. Page charge les groupes via GET /api/groups 2. Pour chaque groupe : └─> GET /api/groups/{groupId}/calendar └─> RĂ©cupĂšre la couleur du calendrier └─> Stocke dans state local : group.calendarColor ``` ### Modification de couleur : ``` 1. Utilisateur clique sur icĂŽne palette 2. Dialog s'ouvre avec couleur actuelle 3. Utilisateur sĂ©lectionne nouvelle couleur 4. Clic "Enregistrer" └─> PATCH /api/groups/{groupId}/calendar { color: "#newcolor" } └─> VĂ©rification membre du groupe (Keycloak) └─> Mise Ă  jour en base de donnĂ©es (Prisma) └─> Mise Ă  jour du state local └─> Toast de confirmation 5. Couleur visible immĂ©diatement partout ``` --- ## 🎯 Points d'affichage de la couleur La couleur du calendrier de groupe est maintenant visible dans : 1. **`/groups`** - Page groupes - Table des groupes (pastille Ă  cĂŽtĂ© du nom) 2. **`/missions/equipe`** - Page gestion Ă©quipe - Table des groupes (icĂŽne colorĂ©e) 3. **`/agenda`** - Page agenda - Liste des calendriers (pastille Ă  gauche) - ÉvĂ©nements dans le calendrier (barre colorĂ©e) 4. **`/vision`** - Page visioconfĂ©rences - Calendrier des rĂ©unions - ÉvĂ©nements du jour 5. **Widgets calendrier** - Tous les composants calendrier - `calendar-widget.tsx` - `calendar-client.tsx` - `calendar.tsx` --- ## đŸ§Ș Tests suggĂ©rĂ©s ### Test 1 : Modification de couleur 1. Aller sur `/groups` ou `/missions/equipe` 2. Cliquer sur ⋯ → "Couleur du calendrier" 3. Choisir une nouvelle couleur 4. Cliquer "Enregistrer" 5. ✅ VĂ©rifier : Pastille mise Ă  jour immĂ©diatement ### Test 2 : Validation format 1. Ouvrir dialog couleur 2. Entrer manuellement un code invalide : `#GGGGGG` 3. Cliquer "Enregistrer" 4. ✅ VĂ©rifier : Message d'erreur affichĂ© ### Test 3 : Permissions 1. Se connecter avec utilisateur NON membre du groupe 2. Essayer de modifier la couleur 3. ✅ VĂ©rifier : Erreur 403 "Vous devez ĂȘtre membre du groupe" ### Test 4 : Persistance 1. Modifier couleur d'un groupe 2. Actualiser la page 3. ✅ VĂ©rifier : Couleur conservĂ©e 4. Aller sur `/agenda` 5. ✅ VĂ©rifier : Couleur visible dans le calendrier --- ## 📁 Fichiers modifiĂ©s ### Nouveaux fichiers : - `app/api/groups/[groupId]/calendar/route.ts` (nouveau endpoint API) ### Fichiers modifiĂ©s : - `components/groups/groups-table.tsx` - Import `Palette` de lucide-react - Ajout interface `calendarColor?` Ă  Group - Ajout Ă©tats `colorPickerDialog`, `selectedGroupForColor`, `selectedColor` - Fonction `fetchGroups()` modifiĂ©e pour charger couleurs - Fonctions `handleOpenColorPicker()` et `handleSaveColor()` - Palette de couleurs `colorPalette` - Dialog de sĂ©lection de couleur - Affichage pastille dans table - `app/missions/equipe/page.tsx` - Import `Palette` de lucide-react - Ajout interface `calendarColor?` Ă  Group - Ajout Ă©tats color picker - Fonction `fetchData()` modifiĂ©e pour charger couleurs - Fonctions `handleOpenColorPicker()` et `handleSaveColor()` - Palette de couleurs - Bouton palette dans actions - Dialog de sĂ©lection de couleur - Affichage icĂŽne colorĂ©e --- ## 🔼 AmĂ©liorations futures possibles 1. **Color picker avancĂ©** - Utiliser un vrai color picker (ex: `react-color`) - Support HSL, RGB en plus de hex 2. **ThĂšmes prĂ©dĂ©finis** - Palettes thĂ©matiques (pastel, vif, entreprise, etc.) - Sauvegarde de palettes personnalisĂ©es 3. **Permissions granulaires** - Seuls les admins du groupe peuvent changer la couleur - RĂŽle "gestionnaire de groupe" dans Keycloak 4. **Historique des couleurs** - Log des changements de couleur - PossibilitĂ© de revenir en arriĂšre 5. **Synchronisation** - Webhook pour notifier les autres utilisateurs en temps rĂ©el - WebSocket pour mise Ă  jour instantanĂ©e sans refresh --- ## 📊 Impact sur les performances - **Chargement initial** : +1 requĂȘte API par groupe (GET calendar) - **Modification** : 1 requĂȘte PATCH, pas de refresh complet - **Cache** : Les calendriers sont dĂ©jĂ  en cache Redis (GET /api/calendars) - **Optimisation** : PossibilitĂ© de batch les requĂȘtes GET calendar en une seule --- ## 🐛 ProblĂšmes connus Aucun problĂšme connu pour le moment. --- ## ✅ Checklist de dĂ©ploiement - [x] API créée et testĂ©e - [x] Interface utilisateur implĂ©mentĂ©e - [x] Validation des permissions - [x] Gestion des erreurs - [x] Pas d'erreurs de linting - [ ] Tests unitaires (Ă  ajouter) - [ ] Tests E2E (Ă  ajouter) - [ ] Documentation utilisateur (Ă  ajouter) --- ## 📞 Support Pour toute question ou problĂšme : 1. VĂ©rifier que l'utilisateur est bien membre du groupe 2. VĂ©rifier le format de la couleur (hex valide) 3. VĂ©rifier les logs serveur pour les erreurs Keycloak 4. VĂ©rifier que le calendrier du groupe existe en base --- **Date de crĂ©ation** : 20 janvier 2026 **Version** : 1.0 **Auteur** : Senior Developer Assistant