diff --git a/em2rp/lib/views/widgets/calendar_widgets/event_details.dart b/em2rp/lib/views/widgets/calendar_widgets/event_details.dart index 8035bec..c852f9f 100644 --- a/em2rp/lib/views/widgets/calendar_widgets/event_details.dart +++ b/em2rp/lib/views/widgets/calendar_widgets/event_details.dart @@ -106,6 +106,25 @@ class EventDetails extends StatelessWidget { .collection('events') .doc(event.id) .update({'status': eventStatusToString(newStatus)}); + // Recharge l'événement depuis Firestore et notifie le parent + final snap = await FirebaseFirestore.instance + .collection('events') + .doc(event.id) + .get(); + final updatedEvent = + EventModel.fromMap(snap.data()!, event.id); + onSelectEvent(updatedEvent, + selectedDate ?? updatedEvent.startDateTime); + // Recharge la liste des événements pour mettre à jour la vue calendrier + final localUserProvider = + Provider.of(context, listen: false); + final userId = localUserProvider.currentUser?.uid; + final canViewAll = + localUserProvider.hasPermission('view_all_users'); + if (userId != null) { + await Provider.of(context, listen: false) + .loadUserEvents(userId, canViewAllEvents: canViewAll); + } }, ), ), @@ -628,44 +647,43 @@ class _FirestoreStatusButton extends StatefulWidget { final String eventId; final EventStatus currentStatus; final Future Function(EventStatus) onStatusChanged; - const _FirestoreStatusButton( - {required this.eventId, - required this.currentStatus, - required this.onStatusChanged}); + const _FirestoreStatusButton({ + required this.eventId, + required this.currentStatus, + required this.onStatusChanged, + }); @override State<_FirestoreStatusButton> createState() => _FirestoreStatusButtonState(); } class _FirestoreStatusButtonState extends State<_FirestoreStatusButton> { - late EventStatus _status; bool _loading = false; - @override - void initState() { - super.initState(); - _status = widget.currentStatus; + Future changerStatut(EventStatus nouveau) async { + if (widget.currentStatus == nouveau) return; + setState(() => _loading = true); + await widget.onStatusChanged(nouveau); + setState(() => _loading = false); } - Future changerStatut(EventStatus nouveau) async { - if (_status == nouveau) return; - setState(() => _loading = true); - await FirebaseFirestore.instance - .collection('events') - .doc(widget.eventId) - .update({'status': eventStatusToString(nouveau)}); - setState(() { - _status = nouveau; - _loading = false; - }); + @override + void didUpdateWidget(covariant _FirestoreStatusButton oldWidget) { + super.didUpdateWidget(oldWidget); + // Si l'événement change, on arrête le loading (sécurité UX) + if (oldWidget.eventId != widget.eventId || + oldWidget.currentStatus != widget.currentStatus) { + if (_loading) setState(() => _loading = false); + } } @override Widget build(BuildContext context) { + final status = widget.currentStatus; String texte; Color couleurFond; List enfants = []; - switch (_status) { + switch (status) { case EventStatus.waitingForApproval: texte = "En Attente"; couleurFond = Colors.yellow.shade600;