ptitspas-ynov/frontend/lib/widgets/admin/admin_manage_widget.dart
2025-09-19 15:44:12 +02:00

133 lines
4.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:p_tits_pas/widgets/admin/base_user_management.dart';
class AdministrateurManagementWidget extends StatelessWidget {
const AdministrateurManagementWidget({super.key});
@override
Widget build(BuildContext context) {
return BaseUserManagementWidget(
config: UserDisplayConfig(
title: 'Administrateur',
role: 'administrateur',
defaultIcon: Icons.admin_panel_settings,
filterFields: [
FilterField(
label: 'Rechercher',
hint: 'Nom ou email',
type: FilterType.text,
filter: (user, query) {
final fullName =
'${user['firstName'] ?? ''} ${user['lastName'] ?? ''}'
.toLowerCase();
final email = (user['email'] ?? '').toLowerCase();
return fullName.contains(query.toLowerCase()) ||
email.contains(query.toLowerCase());
},
),
FilterField(
label: 'Statut',
hint: 'Tous',
type: FilterType.dropdown,
options: ['actif', 'en_attente', 'inactif', 'supprimé'],
filter: (user, status) {
if (status.isEmpty) return true;
return user['statut']?.toString().toLowerCase() ==
status.toLowerCase();
},
),
],
actions: [
const UserAction(
icon: Icons.edit,
color: Colors.orange,
tooltip: 'Modifier',
onPressed: _editAdministrateur,
),
const UserAction(
icon: Icons.security,
color: Colors.blue,
tooltip: 'Gérer droits',
onPressed: _manageRights,
),
const UserAction(
icon: Icons.lock_reset,
color: Colors.purple,
tooltip: 'Réinitialiser MDP',
onPressed: _resetPassword,
),
const UserAction(
icon: Icons.toggle_on,
color: Colors.green,
tooltip: 'Activer/Désactiver',
onPressed: _toggleStatus,
),
const UserAction(
icon: Icons.delete,
color: Colors.red,
tooltip: 'Supprimer',
onPressed: _deleteAdministrateur,
),
],
getDisplayName: (user) => '${user['prenom'] ?? ''} ${user['nom'] ?? ''}',
getSubtitle: (user) {
final email = user['email'] ?? '';
final profession = user['profession'] ?? 'Non spécifiée';
final ville = user['ville'] ?? '';
// final statut = AdministrateurService.getStatutDisplay(user['statut']);
final statut = user['statut'] ?? 'inactif';
final changementMdp =
user['changement_mdp_obligatoire'] == true ? 'MDP à changer' : '';
return '$email\n$profession${ville.isNotEmpty ? '$ville' : ''}\nStatut: $statut ${changementMdp.isNotEmpty ? '$changementMdp' : ''}';
},
));
}
static Future<void> _editAdministrateur(
BuildContext context, Map<String, dynamic> user) async {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Modifier administrateur: ${user['prenom']} ${user['nom']}')),
);
}
static Future<void> _manageRights(
BuildContext context, Map<String, dynamic> user) async {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Gérer droits pour: ${user['prenom']} ${user['nom']}')),
);
}
static Future<void> _resetPassword(
BuildContext context, Map<String, dynamic> user) async {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Réinitialiser mot de passe pour: ${user['prenom']} ${user['nom']}')),
);
}
static Future<void> _toggleStatus(
BuildContext context, Map<String, dynamic> user) async {
final currentStatus = user['statut'] ?? 'inactif';
final newStatus = currentStatus == 'actif' ? 'inactif' : 'actif';
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'${newStatus == 'actif' ? 'Activer' : 'Désactiver'} administrateur: ${user['prenom']} ${user['nom']}')),
);
}
static Future<void> _deleteAdministrateur(
BuildContext context, Map<String, dynamic> user) async {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
'Supprimer administrateur: ${user['prenom']} ${user['nom']}')),
);
}
}