feat(#142): ouvrir la modale au clic sur les cartes du dashboard admin.

Squash merge develop → master.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
MARTIN Julien 2026-07-11 23:20:56 +02:00
parent 003fe6b762
commit d6dac181d2
8 changed files with 20 additions and 2 deletions

View File

@ -122,6 +122,7 @@ class _AdminManagementWidgetState extends State<AdminManagementWidget> {
fallbackIcon: isSuperAdmin
? Icons.verified_user_outlined
: Icons.manage_accounts_outlined,
onCardTap: () => _openAdminEditDialog(user),
subtitleLines: [
user.email,
'Téléphone : ${user.telephone?.trim().isNotEmpty == true ? formatPhoneForDisplay(user.telephone!) : 'Non renseigné'}',

View File

@ -83,6 +83,7 @@ class _AssistanteMaternelleManagementWidgetState
avatarUrl: assistante.user.photoUrl,
fallbackIcon: Icons.face,
vigilanceTooltip: vigilance,
onCardTap: () => _openAssistanteDetails(assistante),
subtitleLines: [
assistante.user.email,
'Zone : ${assistante.residenceCity ?? 'N/A'} | Capacité : ${assistante.maxChildren ?? 0}',

View File

@ -33,6 +33,7 @@ class AdminEnfantUserCard extends StatelessWidget {
final String? photoUrl;
final List<String> subtitleLines;
final List<Widget> actions;
final VoidCallback? onCardTap;
const AdminEnfantUserCard({
super.key,
@ -40,12 +41,14 @@ class AdminEnfantUserCard extends StatelessWidget {
this.photoUrl,
required this.subtitleLines,
this.actions = const [],
this.onCardTap,
});
factory AdminEnfantUserCard.fromEnfant(
EnfantAdminModel enfant, {
List<String> extraSubtitleLines = const [],
List<Widget> actions = const [],
VoidCallback? onCardTap,
}) {
final parents = enfant.parentLinks
.map((l) => l.parentName ?? 'Parent')
@ -64,6 +67,7 @@ class AdminEnfantUserCard extends StatelessWidget {
],
),
actions: actions,
onCardTap: onCardTap,
);
}
@ -71,6 +75,7 @@ class AdminEnfantUserCard extends StatelessWidget {
ParentChildSummary child, {
List<String> extraSubtitleLines = const [],
List<Widget> actions = const [],
VoidCallback? onCardTap,
}) {
return AdminEnfantUserCard(
title: child.fullName,
@ -82,6 +87,7 @@ class AdminEnfantUserCard extends StatelessWidget {
extra: extraSubtitleLines,
),
actions: actions,
onCardTap: onCardTap,
);
}
@ -93,6 +99,7 @@ class AdminEnfantUserCard extends StatelessWidget {
avatarUrl: photoUrl,
subtitleLines: subtitleLines,
actions: actions,
onCardTap: onCardTap,
);
}
}

View File

@ -13,6 +13,7 @@ class AdminUserCard extends StatefulWidget {
final Color? titleColor;
final Color? infoColor;
final String? vigilanceTooltip;
final VoidCallback? onCardTap;
const AdminUserCard({
super.key,
@ -26,6 +27,7 @@ class AdminUserCard extends StatefulWidget {
this.titleColor,
this.infoColor,
this.vigilanceTooltip,
this.onCardTap,
});
@override
@ -46,11 +48,14 @@ class _AdminUserCardState extends State<AdminUserCard> {
return MouseRegion(
onEnter: (_) => setState(() => _isHovered = true),
onExit: (_) => setState(() => _isHovered = false),
cursor: widget.onCardTap != null
? SystemMouseCursors.click
: MouseCursor.defer,
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {},
onTap: widget.onCardTap,
borderRadius: BorderRadius.circular(10),
hoverColor: const Color(0x149CC5C0),
child: Card(

View File

@ -84,6 +84,7 @@ class _EnfantManagementWidgetState extends State<EnfantManagementWidget> {
final enfant = filtered[index];
return AdminEnfantUserCard.fromEnfant(
enfant,
onCardTap: () => _openEnfant(enfant),
actions: [
IconButton(
icon: const Icon(Icons.visibility_outlined),

View File

@ -88,6 +88,7 @@ class _GestionnaireManagementWidgetState
title: user.fullName,
fallbackIcon: Icons.assignment_ind_outlined,
avatarUrl: user.photoUrl,
onCardTap: () => _openGestionnaireEditDialog(user),
subtitleLines: [
user.email,
'Statut : ${user.statut ?? 'Inconnu'}',

View File

@ -77,6 +77,7 @@ class _ParentManagementWidgetState extends State<ParentManagementWidget> {
title: parent.user.fullName,
fallbackIcon: Icons.supervisor_account_outlined,
avatarUrl: parent.user.photoUrl,
onCardTap: () => _openParentDetails(parent),
subtitleLines: [
parent.user.email,
'Statut : ${_displayStatus(parent.user.statut)} | Enfants : ${parent.children.isNotEmpty ? parent.children.length : parent.childrenCount}',

View File

@ -321,11 +321,12 @@ class _PendingValidationRowState extends State<_PendingValidationRow> {
return MouseRegion(
onEnter: (_) => setState(() => _isHovered = true),
onExit: (_) => setState(() => _isHovered = false),
cursor: SystemMouseCursors.click,
child: Material(
color: Colors.transparent,
borderRadius: BorderRadius.circular(10),
child: InkWell(
onTap: () {},
onTap: widget.onOpen,
borderRadius: BorderRadius.circular(10),
hoverColor: const Color(0x149CC5C0),
child: Card(