From a312d9c0fa32a7ad3d518f1cc528a860c6377871 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Thu, 10 Sep 2026 23:13:53 +0200 Subject: [PATCH 1/3] =?UTF-8?q?refactor(#155):=20option=20C=20=E2=80=94=20?= =?UTF-8?q?widgets=20partag=C3=A9s=20sans=20pr=C3=A9fixe=20Admin.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Déplace les composants Admin* du dashboard partagé vers widgets/dashboard/ (ChildDetailModal, AmEditModal, UserCard, Select*, …). Conserve AdminManagementWidget et screens/administrateurs. Rename mécanique, aucun changement de comportement. Co-authored-by: Cursor --- docs/tmp/155-mini-spec-rename-admin-prefix.md | 52 +++++++++++++++++++ .../admin_dashboardScreen.dart | 2 +- .../admin/admin_management_widget.dart | 4 +- .../lib/widgets/admin/am_dossier_wizard.dart | 28 +++++----- ...sistante_maternelle_management_widget.dart | 8 +-- .../lib/widgets/admin/common/user_list.dart | 4 +- .../common/validation_detail_section.dart | 4 +- .../lib/widgets/admin/dossier_list_card.dart | 4 +- .../admin/enfant_management_widget.dart | 8 +-- .../admin/gestionnaire_management_widget.dart | 4 +- .../widgets/admin/parent_dossier_wizard.dart | 4 +- .../admin/parent_managmant_widget.dart | 8 +-- .../widgets/admin/user_management_panel.dart | 6 +-- .../am_children_capacity_grid.dart} | 4 +- .../am_edit_modal.dart} | 30 +++++------ .../am_photo_frame.dart} | 4 +- .../child_detail_modal.dart} | 34 ++++++------ .../children_affiliation_panel.dart} | 8 +-- .../detail_modal.dart} | 10 ++-- .../enfant_user_card.dart} | 16 +++--- .../parent_edit_modal.dart} | 26 +++++----- .../select_am_modal.dart} | 20 +++---- .../select_enfant_modal.dart} | 16 +++--- .../select_famille_modal.dart} | 24 ++++----- .../select_list_modal.dart} | 20 +++---- .../status_capsule.dart} | 4 +- .../user_card.dart} | 8 +-- .../user_list_state.dart} | 4 +- .../user_management_sub_bar.dart} | 0 29 files changed, 208 insertions(+), 156 deletions(-) create mode 100644 docs/tmp/155-mini-spec-rename-admin-prefix.md rename frontend/lib/widgets/{admin/common/admin_am_children_capacity_grid.dart => dashboard/am_children_capacity_grid.dart} (99%) rename frontend/lib/widgets/{admin/common/admin_am_edit_modal.dart => dashboard/am_edit_modal.dart} (96%) rename frontend/lib/widgets/{admin/common/admin_am_photo_frame.dart => dashboard/am_photo_frame.dart} (98%) rename frontend/lib/widgets/{admin/common/admin_child_detail_modal.dart => dashboard/child_detail_modal.dart} (98%) rename frontend/lib/widgets/{admin/common/admin_children_affiliation_panel.dart => dashboard/children_affiliation_panel.dart} (91%) rename frontend/lib/widgets/{admin/common/admin_detail_modal.dart => dashboard/detail_modal.dart} (96%) rename frontend/lib/widgets/{admin/common/admin_enfant_user_card.dart => dashboard/enfant_user_card.dart} (91%) rename frontend/lib/widgets/{admin/common/admin_parent_edit_modal.dart => dashboard/parent_edit_modal.dart} (94%) rename frontend/lib/widgets/{admin/common/admin_select_am_modal.dart => dashboard/select_am_modal.dart} (92%) rename frontend/lib/widgets/{admin/common/admin_select_enfant_modal.dart => dashboard/select_enfant_modal.dart} (83%) rename frontend/lib/widgets/{admin/common/admin_select_famille_modal.dart => dashboard/select_famille_modal.dart} (88%) rename frontend/lib/widgets/{admin/common/admin_select_list_modal.dart => dashboard/select_list_modal.dart} (95%) rename frontend/lib/widgets/{admin/common/admin_status_capsule.dart => dashboard/status_capsule.dart} (95%) rename frontend/lib/widgets/{admin/common/admin_user_card.dart => dashboard/user_card.dart} (97%) rename frontend/lib/widgets/{admin/common/admin_list_state.dart => dashboard/user_list_state.dart} (92%) rename frontend/lib/widgets/{admin/dashboard_admin.dart => dashboard/user_management_sub_bar.dart} (100%) diff --git a/docs/tmp/155-mini-spec-rename-admin-prefix.md b/docs/tmp/155-mini-spec-rename-admin-prefix.md new file mode 100644 index 0000000..dc8344b --- /dev/null +++ b/docs/tmp/155-mini-spec-rename-admin-prefix.md @@ -0,0 +1,52 @@ +# Mini-spec — Rename préfixe `Admin*` dashboard partagé (#155) + +**Ticket** : **#155** +**Branche** : `feature/155-rename-admin-prefix-dashboard` (depuis `develop`) +**Décision naming** : **option C** — dossier neutre `widgets/dashboard/` + noms **sans** préfixe `Admin`. + +--- + +## Principe + +Les widgets partagés **admin + gestionnaire** ne doivent plus s’appeler `Admin*`. +On garde `Admin*` seulement là où c’est vraiment le rôle administrateur. + +## Gardé `Admin*` (hors rename) + +| Élément | Raison | +|---------|--------| +| `AdminManagementWidget` | Onglet **Administrateurs** | +| `screens/administrateurs/*` | `AdminDashboardScreen`, `AdminCreateDialog`, `AdminUserFormDialog` | +| `EnfantAdminModel` | Modèle API (pas un widget) — hors scope ticket | + +## Renames faits + +| Avant | Après | +|-------|--------| +| `widgets/admin/common/admin_child_detail_modal.dart` → `AdminChildDetailModal` | `widgets/dashboard/child_detail_modal.dart` → `ChildDetailModal` | +| `admin_am_edit_modal` → `AdminAmEditModal` | `am_edit_modal` → `AmEditModal` | +| `admin_parent_edit_modal` → `AdminParentEditModal` | `parent_edit_modal` → `ParentEditModal` | +| `admin_user_card` → `AdminUserCard` | `user_card` → `UserCard` | +| `admin_enfant_user_card` → `AdminEnfantUserCard` | `enfant_user_card` → `EnfantUserCard` | +| `admin_am_photo_frame` → `AdminAmPhotoFrame` | `am_photo_frame` → `AmPhotoFrame` | +| `admin_am_children_capacity_grid` | `am_children_capacity_grid` → `AmChildrenCapacityGrid` | +| `admin_children_affiliation_panel` | `children_affiliation_panel` → `ChildrenAffiliationPanel` | +| `admin_select_*` / `AdminSelect*` / `AdminFamilleFoyer` | `select_*` / `Select*` / `FamilleFoyer` | +| `admin_status_capsule` | `status_capsule` → `StatusCapsule` | +| `admin_list_state` → `AdminListState` | `user_list_state` → `UserListState` | +| `admin_detail_modal` → `AdminDetailModal` / `AdminDetailField` | `detail_modal` → `DetailModal` / `DetailField` | +| `dashboard_admin.dart` | `user_management_sub_bar.dart` (`DashboardUserManagementSubBar` inchangé) | + +Dossier `widgets/admin/` conserve les panels métier (`user_management_panel`, wizards, etc.) + `AdminManagementWidget`. + +## Hors scope + +- Refonte UX modales (ticket dédié) +- Rename API / back +- Déplacer tout `widgets/admin/` → `widgets/dashboard/` (panels) — possible follow-up + +## Critères + +- [x] Plus de préfixe `Admin` sur les composants **partagés** listés +- [ ] Build Flutter / recette dashboard admin + gestionnaire OK +- [x] Pas de changement comportemental (rename mécanique) diff --git a/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart b/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart index 20a9678..43c6f97 100644 --- a/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart +++ b/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/configuration_service.dart'; -import 'package:p_tits_pas/widgets/admin/dashboard_admin.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_management_sub_bar.dart'; import 'package:p_tits_pas/widgets/admin/parametres_panel.dart'; import 'package:p_tits_pas/widgets/admin/user_management_panel.dart'; import 'package:p_tits_pas/widgets/app_footer.dart'; diff --git a/frontend/lib/widgets/admin/admin_management_widget.dart b/frontend/lib/widgets/admin/admin_management_widget.dart index 08d40a3..3538efc 100644 --- a/frontend/lib/widgets/admin/admin_management_widget.dart +++ b/frontend/lib/widgets/admin/admin_management_widget.dart @@ -5,7 +5,7 @@ import 'package:p_tits_pas/screens/administrateurs/creation/gestionnaires_create import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; @@ -183,7 +183,7 @@ class _AdminManagementWidgetState extends State { final isSuperAdmin = _isSuperAdmin(user); final canEdit = _canEditAdmin(user); final canDelete = _canDeleteAdmin(user); - return AdminUserCard( + return UserCard( title: user.fullName, fallbackIcon: isSuperAdmin ? Icons.verified_user_outlined diff --git a/frontend/lib/widgets/admin/am_dossier_wizard.dart b/frontend/lib/widgets/admin/am_dossier_wizard.dart index dd6b0cb..e8f8b19 100644 --- a/frontend/lib/widgets/admin/am_dossier_wizard.dart +++ b/frontend/lib/widgets/admin/am_dossier_wizard.dart @@ -14,8 +14,8 @@ import 'package:p_tits_pas/utils/name_format_utils.dart'; import 'package:p_tits_pas/utils/nir_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/utils/postal_utils.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_photo_frame.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; +import 'package:p_tits_pas/widgets/dashboard/detail_modal.dart'; import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; import 'package:p_tits_pas/widgets/admin/validation_refus_form.dart'; @@ -221,32 +221,32 @@ class _AmDossierWizardState extends State { void _emitStep() => widget.onStepChanged?.call(_step, _stepCount); - List _photoProFields(DossierAM d) { + List _photoProFields(DossierAM d) { final u = d.user; return [ - AdminDetailField(label: 'NIR', value: _formatNirForDisplay(d.nir)), - AdminDetailField( + DetailField(label: 'NIR', value: _formatNirForDisplay(d.nir)), + DetailField( label: 'Date de naissance', value: formatIsoDateFr(u.dateNaissance), ), - AdminDetailField( + DetailField( label: 'Ville de naissance', value: _v(u.lieuNaissanceVille), ), - AdminDetailField( + DetailField( label: 'Pays de naissance', value: _v(u.lieuNaissancePays), ), - AdminDetailField(label: 'N° Agrément', value: _v(d.numeroAgrement)), - AdminDetailField( + DetailField(label: 'N° Agrément', value: _v(d.numeroAgrement)), + DetailField( label: 'Date d’agrément', value: formatIsoDateFr(d.dateAgrement), ), - AdminDetailField( + DetailField( label: 'Capacité max (enfants)', value: d.nbMaxEnfants != null ? d.nbMaxEnfants.toString() : '–', ), - AdminDetailField( + DetailField( label: 'Places disponibles', value: d.placesDisponibles != null ? d.placesDisponibles.toString() @@ -741,14 +741,14 @@ class _AmDossierWizardState extends State { Widget _buildStep1() { // Modale calée sur les TF ; photo étirée sur toute la hauteur utile - // (largeur = [AdminAmPhotoFrame.columnWidthForHeight], cadre inclus). + // (largeur = [AmPhotoFrame.columnWidthForHeight], cadre inclus). return LayoutBuilder( builder: (context, c) { final maxRowW = c.maxWidth; final maxRowH = c.maxHeight.clamp(0.0, double.infinity); final maxPhotoW = (maxRowW - _photoProGap - _proColumnMinWidth) .clamp(0.0, double.infinity); - var photoW = AdminAmPhotoFrame.columnWidthForHeight(maxRowH) + var photoW = AmPhotoFrame.columnWidthForHeight(maxRowH) .clamp(_photoColumnMinWidth, 360.0); if (photoW > maxPhotoW) photoW = maxPhotoW; @@ -762,7 +762,7 @@ class _AmDossierWizardState extends State { final Widget photo; if (_isCreate) { - photo = AdminAmPhotoFrame( + photo = AmPhotoFrame( imageBytes: _photoBytes, onTap: _pickPhoto, onClear: _photoBytes != null ? _clearPhoto : null, diff --git a/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart b/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart index b48212b..8da3c30 100644 --- a/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart +++ b/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart @@ -5,8 +5,8 @@ import 'package:p_tits_pas/utils/am_vigilance.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_edit_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_edit_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; @@ -130,7 +130,7 @@ class _AssistanteMaternelleManagementWidgetState itemBuilder: (context, index) { final assistante = filteredAssistantes[index]; final vigilance = amPlacesVigilanceMessage(assistante); - return AdminUserCard( + return UserCard( title: assistante.user.fullName, avatarUrl: assistante.user.photoUrl, fallbackIcon: Icons.face, @@ -161,7 +161,7 @@ class _AssistanteMaternelleManagementWidgetState void _openAssistanteDetails(AssistanteMaternelleModel assistante) { showDialog( context: context, - builder: (context) => AdminAmEditModal( + builder: (context) => AmEditModal( assistante: assistante, onSaved: _loadAssistantes, ), diff --git a/frontend/lib/widgets/admin/common/user_list.dart b/frontend/lib/widgets/admin/common/user_list.dart index 1df400c..3b439d5 100644 --- a/frontend/lib/widgets/admin/common/user_list.dart +++ b/frontend/lib/widgets/admin/common/user_list.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_list_state.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_list_state.dart'; class UserList extends StatelessWidget { final bool isLoading; @@ -28,7 +28,7 @@ class UserList extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - AdminListState( + UserListState( isLoading: isLoading, error: error, isEmpty: isEmpty, diff --git a/frontend/lib/widgets/admin/common/validation_detail_section.dart b/frontend/lib/widgets/admin/common/validation_detail_section.dart index 80f5a42..5683859 100644 --- a/frontend/lib/widgets/admin/common/validation_detail_section.dart +++ b/frontend/lib/widgets/admin/common/validation_detail_section.dart @@ -4,7 +4,7 @@ import 'package:p_tits_pas/utils/email_utils.dart'; import 'package:p_tits_pas/utils/nir_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/utils/postal_utils.dart'; -import 'admin_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/detail_modal.dart'; /// Réglages des formulaires validation / wizard AM — **jouer sur ces 3 leviers**. class ValidationFormMetrics { @@ -60,7 +60,7 @@ class ValidationFormMetrics { class ValidationDetailSection extends StatelessWidget { /// Si null ou vide, pas de bandeau titre (gain de place vertical, ex. wizard AM). final String? title; - final List fields; + final List fields; /// Nombre de champs par ligne (1 = plein largeur, 2 = deux côte à côte). Ex. [2, 2, 1, 2] pour identité. final List? rowLayout; diff --git a/frontend/lib/widgets/admin/dossier_list_card.dart b/frontend/lib/widgets/admin/dossier_list_card.dart index 7608df2..ad66e88 100644 --- a/frontend/lib/widgets/admin/dossier_list_card.dart +++ b/frontend/lib/widgets/admin/dossier_list_card.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; /// Carte dossier unifiée (#153) — fond neutre, accent couleur sur l’icône. @@ -54,7 +54,7 @@ class DossierListCard extends StatelessWidget { if (!emptyKids && countLabel != null) countLabel, ]; - return AdminUserCard( + return UserCard( title: num, subtitleLines: subtitle, avatarUrl: !isFamille && avatar.isNotEmpty ? avatar : null, diff --git a/frontend/lib/widgets/admin/enfant_management_widget.dart b/frontend/lib/widgets/admin/enfant_management_widget.dart index 6731ff7..61f2ce9 100644 --- a/frontend/lib/widgets/admin/enfant_management_widget.dart +++ b/frontend/lib/widgets/admin/enfant_management_widget.dart @@ -5,8 +5,8 @@ import 'package:p_tits_pas/models/enfant_admin_model.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_child_detail_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_enfant_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/enfant_user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; @@ -68,7 +68,7 @@ class _EnfantManagementWidgetState extends State { Future _openEnfant(EnfantAdminModel enfant) async { await showDialog( context: context, - builder: (ctx) => AdminChildDetailModal( + builder: (ctx) => ChildDetailModal( enfant: enfant, onSaved: _loadEnfants, onDeleted: _loadEnfants, @@ -224,7 +224,7 @@ class _EnfantManagementWidgetState extends State { itemCount: filtered.length, itemBuilder: (context, index) { final enfant = filtered[index]; - return AdminEnfantUserCard.fromEnfant( + return EnfantUserCard.fromEnfant( enfant, onCardTap: () => _openEnfant(enfant), actions: [ diff --git a/frontend/lib/widgets/admin/gestionnaire_management_widget.dart b/frontend/lib/widgets/admin/gestionnaire_management_widget.dart index f5cda69..468f43f 100644 --- a/frontend/lib/widgets/admin/gestionnaire_management_widget.dart +++ b/frontend/lib/widgets/admin/gestionnaire_management_widget.dart @@ -4,7 +4,7 @@ import 'package:p_tits_pas/screens/administrateurs/creation/gestionnaires_create import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; @@ -141,7 +141,7 @@ class _GestionnaireManagementWidgetState final user = filteredGestionnaires[index]; final isSelf = _currentUserId != null && _currentUserId == user.id; - return AdminUserCard( + return UserCard( title: user.fullName, fallbackIcon: Icons.assignment_ind_outlined, avatarUrl: user.photoUrl, diff --git a/frontend/lib/widgets/admin/parent_dossier_wizard.dart b/frontend/lib/widgets/admin/parent_dossier_wizard.dart index 7ff061a..e50ca2a 100644 --- a/frontend/lib/widgets/admin/parent_dossier_wizard.dart +++ b/frontend/lib/widgets/admin/parent_dossier_wizard.dart @@ -14,7 +14,7 @@ import 'package:p_tits_pas/utils/enfant_status_utils.dart'; import 'package:p_tits_pas/utils/name_format_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/utils/postal_utils.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_photo_frame.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; import 'package:p_tits_pas/widgets/admin/validation_refus_form.dart'; @@ -860,7 +860,7 @@ class _ParentDossierWizardState extends State { child: SizedBox( width: pw, height: ph, - child: AdminAmPhotoFrame( + child: AmPhotoFrame( photoUrl: child.photoBytes == null ? child.existingPhotoUrl : null, diff --git a/frontend/lib/widgets/admin/parent_managmant_widget.dart b/frontend/lib/widgets/admin/parent_managmant_widget.dart index 69b2683..96d912a 100644 --- a/frontend/lib/widgets/admin/parent_managmant_widget.dart +++ b/frontend/lib/widgets/admin/parent_managmant_widget.dart @@ -4,8 +4,8 @@ import 'package:p_tits_pas/models/parent_model.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_parent_edit_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_edit_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; @@ -146,7 +146,7 @@ class _ParentManagementWidgetState extends State { itemCount: filteredParents.length, itemBuilder: (context, index) { final parent = filteredParents[index]; - return AdminUserCard( + return UserCard( title: parent.user.fullName, fallbackIcon: Icons.supervisor_account_outlined, avatarUrl: parent.user.photoUrl, @@ -189,7 +189,7 @@ class _ParentManagementWidgetState extends State { void _openParentDetails(ParentModel parent) { showDialog( context: context, - builder: (context) => AdminParentEditModal( + builder: (context) => ParentEditModal( parent: parent, onSaved: _loadParents, ), diff --git a/frontend/lib/widgets/admin/user_management_panel.dart b/frontend/lib/widgets/admin/user_management_panel.dart index fb22c19..270cee3 100644 --- a/frontend/lib/widgets/admin/user_management_panel.dart +++ b/frontend/lib/widgets/admin/user_management_panel.dart @@ -3,8 +3,8 @@ import 'package:p_tits_pas/screens/administrateurs/creation/gestionnaires_create import 'package:p_tits_pas/widgets/admin/admin_management_widget.dart'; import 'package:p_tits_pas/widgets/admin/am_dossier_create_modal.dart'; import 'package:p_tits_pas/widgets/admin/assistante_maternelle_management_widget.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_child_detail_modal.dart'; -import 'package:p_tits_pas/widgets/admin/dashboard_admin.dart'; +import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_management_sub_bar.dart'; import 'package:p_tits_pas/widgets/admin/dossiers_management_widget.dart'; import 'package:p_tits_pas/widgets/admin/enfant_management_widget.dart'; import 'package:p_tits_pas/widgets/admin/gestionnaire_management_widget.dart'; @@ -348,7 +348,7 @@ class _UserManagementPanelState extends State { context: context, barrierDismissible: false, builder: (dialogContext) { - return AdminChildDetailModal.create( + return ChildDetailModal.create( onSaved: () { if (!mounted) return; setState(() => _enfantRefreshTick++); diff --git a/frontend/lib/widgets/admin/common/admin_am_children_capacity_grid.dart b/frontend/lib/widgets/dashboard/am_children_capacity_grid.dart similarity index 99% rename from frontend/lib/widgets/admin/common/admin_am_children_capacity_grid.dart rename to frontend/lib/widgets/dashboard/am_children_capacity_grid.dart index 5b28e3c..a475c06 100644 --- a/frontend/lib/widgets/admin/common/admin_am_children_capacity_grid.dart +++ b/frontend/lib/widgets/dashboard/am_children_capacity_grid.dart @@ -5,7 +5,7 @@ import 'package:p_tits_pas/utils/date_display_utils.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; /// Grille 2×2 des places d'accueil AM (max 4, limitée à [capacity]). -class AdminAmChildrenCapacityGrid extends StatelessWidget { +class AmChildrenCapacityGrid extends StatelessWidget { static const int _gridSlots = 4; static const double _slotHeight = 44; static const double _gridPadding = 10; @@ -23,7 +23,7 @@ class AdminAmChildrenCapacityGrid extends StatelessWidget { /// Clic sur une case libre → même flux que « Rattacher un enfant » (#149). final VoidCallback? onAttachEmpty; - const AdminAmChildrenCapacityGrid({ + const AmChildrenCapacityGrid({ super.key, required this.children, required this.capacity, diff --git a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart b/frontend/lib/widgets/dashboard/am_edit_modal.dart similarity index 96% rename from frontend/lib/widgets/admin/common/admin_am_edit_modal.dart rename to frontend/lib/widgets/dashboard/am_edit_modal.dart index 5855e69..1ee2cf1 100644 --- a/frontend/lib/widgets/admin/common/admin_am_edit_modal.dart +++ b/frontend/lib/widgets/dashboard/am_edit_modal.dart @@ -7,31 +7,31 @@ import 'package:p_tits_pas/utils/date_display_utils.dart'; import 'package:p_tits_pas/utils/nir_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/services/user_service.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_children_capacity_grid.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_photo_frame.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_child_detail_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_enfant_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_status_capsule.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_children_capacity_grid.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; +import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_enfant_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/status_capsule.dart'; import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; /// Fiche AM éditable (ticket #131) — identité | fiche pro (photo) | enfants. -class AdminAmEditModal extends StatefulWidget { +class AmEditModal extends StatefulWidget { final AssistanteMaternelleModel assistante; final VoidCallback? onSaved; - const AdminAmEditModal({ + const AmEditModal({ super.key, required this.assistante, this.onSaved, }); @override - State createState() => _AdminAmEditModalState(); + State createState() => _AmEditModalState(); } -class _AdminAmEditModalState extends State +class _AmEditModalState extends State with SingleTickerProviderStateMixin { late final TabController _tabCtrl; late final TextEditingController _nomCtrl; @@ -404,7 +404,7 @@ class _AdminAmEditModalState extends State if (!mounted) return; await showDialog( context: context, - builder: (ctx) => AdminChildDetailModal( + builder: (ctx) => ChildDetailModal( enfant: enfant, onSaved: _refreshChildrenDetails, ), @@ -450,7 +450,7 @@ class _AdminAmEditModalState extends State Future _attachChild() async { if (_capacityFull || !mounted) return; - final selected = await AdminSelectEnfantModal.show( + final selected = await SelectEnfantModal.show( context, excludeIds: _children.map((c) => c.id).toSet(), title: 'Rattacher un enfant', @@ -589,7 +589,7 @@ class _AdminAmEditModalState extends State final maxRowH = c.maxHeight.isFinite ? c.maxHeight : _proTabHeight; final bodyH = maxRowH; - final idealPhotoW = bodyH * AdminAmPhotoFrame.idPhotoAspectRatio + 16; + final idealPhotoW = bodyH * AmPhotoFrame.idPhotoAspectRatio + 16; final maxPhotoW = (maxRowW - _photoProGap - _proColumnMinWidth) .clamp(0.0, double.infinity); var photoW = idealPhotoW.clamp(_photoColumnMinWidth, 220.0); @@ -600,7 +600,7 @@ class _AdminAmEditModalState extends State children: [ SizedBox( width: photoW, - child: AdminAmPhotoFrame( + child: AmPhotoFrame( photoUrl: widget.assistante.user.photoUrl, ), ), @@ -728,7 +728,7 @@ class _AdminAmEditModalState extends State ), ), const SizedBox(height: 8), - AdminAmChildrenCapacityGrid( + AmChildrenCapacityGrid( children: _children, capacity: capacity, onOpen: _openChild, @@ -820,7 +820,7 @@ class _AdminAmEditModalState extends State const SizedBox(width: 12), SizedBox( width: 160, - child: AdminStatusCapsule( + child: StatusCapsule( statut: _statut, onChanged: (v) => setState(() { _statut = v; diff --git a/frontend/lib/widgets/admin/common/admin_am_photo_frame.dart b/frontend/lib/widgets/dashboard/am_photo_frame.dart similarity index 98% rename from frontend/lib/widgets/admin/common/admin_am_photo_frame.dart rename to frontend/lib/widgets/dashboard/am_photo_frame.dart index 3da8051..dd990fd 100644 --- a/frontend/lib/widgets/admin/common/admin_am_photo_frame.dart +++ b/frontend/lib/widgets/dashboard/am_photo_frame.dart @@ -5,7 +5,7 @@ import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; /// Cadre photo identité AM / enfant (35×45 mm) — même logique que [ValidationAmWizard]. -class AdminAmPhotoFrame extends StatelessWidget { +class AmPhotoFrame extends StatelessWidget { final String? photoUrl; final Uint8List? imageBytes; final VoidCallback? onTap; @@ -14,7 +14,7 @@ class AdminAmPhotoFrame extends StatelessWidget { static const double idPhotoAspectRatio = 35 / 45; - const AdminAmPhotoFrame({ + const AmPhotoFrame({ super.key, this.photoUrl, this.imageBytes, diff --git a/frontend/lib/widgets/admin/common/admin_child_detail_modal.dart b/frontend/lib/widgets/dashboard/child_detail_modal.dart similarity index 98% rename from frontend/lib/widgets/admin/common/admin_child_detail_modal.dart rename to frontend/lib/widgets/dashboard/child_detail_modal.dart index 30aec24..3701b27 100644 --- a/frontend/lib/widgets/admin/common/admin_child_detail_modal.dart +++ b/frontend/lib/widgets/dashboard/child_detail_modal.dart @@ -11,24 +11,24 @@ import 'package:p_tits_pas/utils/date_display_utils.dart'; import 'package:p_tits_pas/utils/enfant_status_utils.dart'; import 'package:p_tits_pas/utils/name_format_utils.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_edit_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_photo_frame.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_parent_edit_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_am_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_famille_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_edit_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_edit_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_am_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_famille_modal.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; /// Fiche enfant consultation / édition (#138) ou création (#132). -class AdminChildDetailModal extends StatefulWidget { +class ChildDetailModal extends StatefulWidget { final EnfantAdminModel? enfant; final VoidCallback? onSaved; final VoidCallback? onDeleted; final bool isCreating; - const AdminChildDetailModal({ + const ChildDetailModal({ super.key, required EnfantAdminModel this.enfant, this.onSaved, @@ -36,7 +36,7 @@ class AdminChildDetailModal extends StatefulWidget { }) : isCreating = false; /// Création depuis l'onglet Enfants (#132). - const AdminChildDetailModal.create({ + const ChildDetailModal.create({ super.key, this.onSaved, }) : enfant = null, @@ -44,10 +44,10 @@ class AdminChildDetailModal extends StatefulWidget { isCreating = true; @override - State createState() => _AdminChildDetailModalState(); + State createState() => _ChildDetailModalState(); } -class _AdminChildDetailModalState extends State { +class _ChildDetailModalState extends State { late final TextEditingController _prenomCtrl; late final TextEditingController _nomCtrl; late final TextEditingController _birthCtrl; @@ -65,7 +65,7 @@ class _AdminChildDetailModalState extends State { String? _baselineAmUserId; /// Famille choisie en mode création (#132). - AdminFamilleFoyer? _selectedFamily; + FamilleFoyer? _selectedFamily; /// Liens parents locaux (édition) — mis à jour après rattachement foyer (#157). List? _localParentLinks; @@ -283,7 +283,7 @@ class _AdminChildDetailModalState extends State { if (!mounted) return; await showDialog( context: context, - builder: (ctx) => AdminParentEditModal( + builder: (ctx) => ParentEditModal( parent: parent, onSaved: () => widget.onSaved?.call(), ), @@ -624,7 +624,7 @@ class _AdminChildDetailModalState extends State { if (am == null) return; await showDialog( context: context, - builder: (ctx) => AdminAmEditModal( + builder: (ctx) => AmEditModal( assistante: am, onSaved: () async { await _reloadPlacementFromServer(); @@ -676,7 +676,7 @@ class _AdminChildDetailModalState extends State { } if (!mounted) return; - final selected = await AdminSelectAmModal.show( + final selected = await SelectAmModal.show( context, excludeIds: { if (_linkedAm != null) _linkedAm!.user.id, @@ -986,7 +986,7 @@ class _AdminChildDetailModalState extends State { final maxRowW = c.maxWidth; final maxRowH = c.maxHeight; final idealPhotoW = - maxRowH * AdminAmPhotoFrame.idPhotoAspectRatio + 16; + maxRowH * AmPhotoFrame.idPhotoAspectRatio + 16; final maxPhotoW = (maxRowW - _photoProGap - _proColumnMinWidth) .clamp(0.0, double.infinity); var photoW = idealPhotoW.clamp(_photoColumnMinWidth, _photoColumnMaxWidth); @@ -1001,7 +1001,7 @@ class _AdminChildDetailModalState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Expanded( - child: AdminAmPhotoFrame( + child: AmPhotoFrame( photoUrl: widget.isCreating ? null : widget.enfant?.photoUrl, @@ -1329,7 +1329,7 @@ class _AdminChildDetailModalState extends State { Future _pickFamily() async { if (_busy) return; - final selected = await AdminSelectFamilleModal.show( + final selected = await SelectFamilleModal.show( context, title: 'Choisir une famille', ); diff --git a/frontend/lib/widgets/admin/common/admin_children_affiliation_panel.dart b/frontend/lib/widgets/dashboard/children_affiliation_panel.dart similarity index 91% rename from frontend/lib/widgets/admin/common/admin_children_affiliation_panel.dart rename to frontend/lib/widgets/dashboard/children_affiliation_panel.dart index 526d7f8..2cacec5 100644 --- a/frontend/lib/widgets/admin/common/admin_children_affiliation_panel.dart +++ b/frontend/lib/widgets/dashboard/children_affiliation_panel.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/parent_child_summary.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_enfant_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/enfant_user_card.dart'; /// Liste scrollable d'enfants rattachés (fiche parent / fiche AM). -class AdminChildrenAffiliationPanel extends StatelessWidget { +class ChildrenAffiliationPanel extends StatelessWidget { final List children; final ScrollController scrollController; final void Function(ParentChildSummary child) onOpen; @@ -14,7 +14,7 @@ class AdminChildrenAffiliationPanel extends StatelessWidget { static const double _itemHeight = 58; static const double defaultViewportHeight = _itemHeight * 2.5 + 8; - const AdminChildrenAffiliationPanel({ + const ChildrenAffiliationPanel({ super.key, required this.children, required this.scrollController, @@ -62,7 +62,7 @@ class AdminChildrenAffiliationPanel extends StatelessWidget { itemCount: children.length, itemBuilder: (_, i) { final c = children[i]; - return AdminEnfantUserCard.fromSummary( + return EnfantUserCard.fromSummary( c, onCardTap: () => onOpen(c), actions: [ diff --git a/frontend/lib/widgets/admin/common/admin_detail_modal.dart b/frontend/lib/widgets/dashboard/detail_modal.dart similarity index 96% rename from frontend/lib/widgets/admin/common/admin_detail_modal.dart rename to frontend/lib/widgets/dashboard/detail_modal.dart index affc0d8..255d2bb 100644 --- a/frontend/lib/widgets/admin/common/admin_detail_modal.dart +++ b/frontend/lib/widgets/dashboard/detail_modal.dart @@ -1,23 +1,23 @@ import 'package:flutter/material.dart'; -class AdminDetailField { +class DetailField { final String label; final String value; - const AdminDetailField({ + const DetailField({ required this.label, required this.value, }); } -class AdminDetailModal extends StatelessWidget { +class DetailModal extends StatelessWidget { final String title; final String? subtitle; - final List fields; + final List fields; final VoidCallback onEdit; final VoidCallback onDelete; - const AdminDetailModal({ + const DetailModal({ super.key, required this.title, this.subtitle, diff --git a/frontend/lib/widgets/admin/common/admin_enfant_user_card.dart b/frontend/lib/widgets/dashboard/enfant_user_card.dart similarity index 91% rename from frontend/lib/widgets/admin/common/admin_enfant_user_card.dart rename to frontend/lib/widgets/dashboard/enfant_user_card.dart index 04b22e5..347fccb 100644 --- a/frontend/lib/widgets/admin/common/admin_enfant_user_card.dart +++ b/frontend/lib/widgets/dashboard/enfant_user_card.dart @@ -4,7 +4,7 @@ import 'package:p_tits_pas/models/parent_child_summary.dart'; import 'package:p_tits_pas/utils/date_display_utils.dart'; import 'package:p_tits_pas/utils/enfant_status_utils.dart'; import 'package:p_tits_pas/utils/enfant_vigilance.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; List enfantAdminSubtitleLines({ required String status, @@ -29,7 +29,7 @@ List enfantAdminSubtitleLines({ } /// Carte enfant admin (photo, nom, âge) — même rendu onglet Enfants / fiche parent. -class AdminEnfantUserCard extends StatelessWidget { +class EnfantUserCard extends StatelessWidget { final String title; final String? photoUrl; final List subtitleLines; @@ -40,7 +40,7 @@ class AdminEnfantUserCard extends StatelessWidget { final Color? borderColor; final String? vigilanceTooltip; - const AdminEnfantUserCard({ + const EnfantUserCard({ super.key, required this.title, this.photoUrl, @@ -53,7 +53,7 @@ class AdminEnfantUserCard extends StatelessWidget { this.vigilanceTooltip, }); - factory AdminEnfantUserCard.fromEnfant( + factory EnfantUserCard.fromEnfant( EnfantAdminModel enfant, { List extraSubtitleLines = const [], List actions = const [], @@ -67,7 +67,7 @@ class AdminEnfantUserCard extends StatelessWidget { .map((l) => l.parentName ?? 'Parent') .join(', '); final orphan = enfantHasNoResponsable(enfant); - return AdminEnfantUserCard( + return EnfantUserCard( title: enfant.fullName, photoUrl: enfant.photoUrl, subtitleLines: enfantAdminSubtitleLines( @@ -92,7 +92,7 @@ class AdminEnfantUserCard extends StatelessWidget { ); } - factory AdminEnfantUserCard.fromSummary( + factory EnfantUserCard.fromSummary( ParentChildSummary child, { List extraSubtitleLines = const [], List actions = const [], @@ -100,7 +100,7 @@ class AdminEnfantUserCard extends StatelessWidget { EdgeInsetsGeometry? margin, EdgeInsetsGeometry? contentPadding, }) { - return AdminEnfantUserCard( + return EnfantUserCard( title: child.fullName, photoUrl: child.photoUrl, subtitleLines: enfantAdminSubtitleLines( @@ -118,7 +118,7 @@ class AdminEnfantUserCard extends StatelessWidget { @override Widget build(BuildContext context) { - return AdminUserCard( + return UserCard( title: title, fallbackIcon: Icons.child_care_outlined, avatarUrl: photoUrl, diff --git a/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart b/frontend/lib/widgets/dashboard/parent_edit_modal.dart similarity index 94% rename from frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart rename to frontend/lib/widgets/dashboard/parent_edit_modal.dart index 101b6a5..c3c7093 100644 --- a/frontend/lib/widgets/admin/common/admin_parent_edit_modal.dart +++ b/frontend/lib/widgets/dashboard/parent_edit_modal.dart @@ -4,30 +4,30 @@ import 'package:p_tits_pas/models/parent_child_summary.dart'; import 'package:p_tits_pas/models/parent_model.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/services/user_service.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_child_detail_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_children_affiliation_panel.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_enfant_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_status_capsule.dart'; +import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/children_affiliation_panel.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_enfant_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/status_capsule.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; /// Fiche parent éditable (doc 28 §6.1, tickets #131 / #138). /// Shell et typo alignés sur [ValidationDossierModal] / wizards validation. -class AdminParentEditModal extends StatefulWidget { +class ParentEditModal extends StatefulWidget { final ParentModel parent; final VoidCallback? onSaved; - const AdminParentEditModal({ + const ParentEditModal({ super.key, required this.parent, this.onSaved, }); @override - State createState() => _AdminParentEditModalState(); + State createState() => _ParentEditModalState(); } -class _AdminParentEditModalState extends State { +class _ParentEditModalState extends State { late final TextEditingController _nomCtrl; late final TextEditingController _prenomCtrl; late final TextEditingController _emailCtrl; @@ -129,7 +129,7 @@ class _AdminParentEditModalState extends State { if (!mounted) return; await showDialog( context: context, - builder: (ctx) => AdminParentEditModal( + builder: (ctx) => ParentEditModal( parent: parent, onSaved: () async { try { @@ -244,7 +244,7 @@ class _AdminParentEditModalState extends State { if (!mounted) return; await showDialog( context: context, - builder: (ctx) => AdminChildDetailModal( + builder: (ctx) => ChildDetailModal( enfant: enfant, onSaved: _reloadChildren, ), @@ -322,7 +322,7 @@ class _AdminParentEditModalState extends State { Future _attachChild() async { if (!mounted) return; - final selected = await AdminSelectEnfantModal.show( + final selected = await SelectEnfantModal.show( context, excludeIds: _children.map((c) => c.id).toSet(), title: 'Rattacher un enfant', @@ -350,7 +350,7 @@ class _AdminParentEditModalState extends State { } Widget _childrenPanel() { - return AdminChildrenAffiliationPanel( + return ChildrenAffiliationPanel( children: _children, scrollController: _childrenScrollCtrl, onOpen: _openChild, @@ -437,7 +437,7 @@ class _AdminParentEditModalState extends State { const SizedBox(width: 12), SizedBox( width: 160, - child: AdminStatusCapsule( + child: StatusCapsule( statut: _statut, onChanged: (v) => setState(() { _statut = v; diff --git a/frontend/lib/widgets/admin/common/admin_select_am_modal.dart b/frontend/lib/widgets/dashboard/select_am_modal.dart similarity index 92% rename from frontend/lib/widgets/admin/common/admin_select_am_modal.dart rename to frontend/lib/widgets/dashboard/select_am_modal.dart index ab46601..b35c5a7 100644 --- a/frontend/lib/widgets/admin/common/admin_select_am_modal.dart +++ b/frontend/lib/widgets/dashboard/select_am_modal.dart @@ -3,9 +3,9 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/assistante_maternelle_model.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/am_vigilance.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_am_edit_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_list_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_edit_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_list_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; List _amSelectSubtitleLines(AssistanteMaternelleModel am) { @@ -28,22 +28,22 @@ List _amSelectSubtitleLines(AssistanteMaternelleModel am) { } /// Sélection d'une AM à rattacher (fiche enfant) — ticket #147. -/// S'appuie sur [AdminSelectListModal] (shell partagé avec #146). -class AdminSelectAmModal { - AdminSelectAmModal._(); +/// S'appuie sur [SelectListModal] (shell partagé avec #146). +class SelectAmModal { + SelectAmModal._(); static Future show( BuildContext context, { Set excludeIds = const {}, String title = 'Choisir une assistante maternelle', }) { - return AdminSelectListModal.show( + return SelectListModal.show( context, title: title, searchHint: 'Rechercher par nom, prénom ou zone…', emptyMessage: 'Aucune assistante maternelle disponible', noResultsMessage: 'Aucune AM avec place libre pour cette recherche', - toggleFilter: const AdminSelectToggleFilter( + toggleFilter: const SelectToggleFilter( label: 'Libre', initialValue: true, whenEnabled: amHasFreePlace, @@ -76,7 +76,7 @@ class AdminSelectAmModal { _resolveAmSelection(ctx, am, reload), itemBuilder: (context, am, onSelect) { final full = !amHasFreePlace(am); - return AdminUserCard( + return UserCard( title: am.user.fullName, avatarUrl: am.user.photoUrl, fallbackIcon: Icons.face, @@ -150,7 +150,7 @@ class _AmNoPlaceWarningDialogState extends State<_AmNoPlaceWarningDialog> { if (!mounted) return; await showDialog( context: context, - builder: (ctx) => AdminAmEditModal( + builder: (ctx) => AmEditModal( assistante: _am, onSaved: () async { try { diff --git a/frontend/lib/widgets/admin/common/admin_select_enfant_modal.dart b/frontend/lib/widgets/dashboard/select_enfant_modal.dart similarity index 83% rename from frontend/lib/widgets/admin/common/admin_select_enfant_modal.dart rename to frontend/lib/widgets/dashboard/select_enfant_modal.dart index dafe5d4..785c04e 100644 --- a/frontend/lib/widgets/admin/common/admin_select_enfant_modal.dart +++ b/frontend/lib/widgets/dashboard/select_enfant_modal.dart @@ -2,13 +2,13 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/enfant_admin_model.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/enfant_status_utils.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_enfant_user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_list_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/enfant_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_list_modal.dart'; /// Sélection d'un enfant à rattacher (fiche AM / fiche parent) — ticket #146. -/// S'appuie sur [AdminSelectListModal] (shell partagé avec #147). -class AdminSelectEnfantModal { - AdminSelectEnfantModal._(); +/// S'appuie sur [SelectListModal] (shell partagé avec #147). +class SelectEnfantModal { + SelectEnfantModal._(); static Future show( BuildContext context, { @@ -17,7 +17,7 @@ class AdminSelectEnfantModal { /// Affiché uniquement depuis la fiche AM : filtre les enfants déjà en garde. bool showSansGardeFilter = false, }) { - return AdminSelectListModal.show( + return SelectListModal.show( context, title: title, searchHint: 'Rechercher par nom ou prénom…', @@ -26,7 +26,7 @@ class AdminSelectEnfantModal { ? 'Aucun enfant sans garde pour cette recherche' : 'Aucun résultat pour cette recherche', toggleFilter: showSansGardeFilter - ? AdminSelectToggleFilter( + ? SelectToggleFilter( label: 'Sans garde', initialValue: true, whenEnabled: (e) => @@ -50,7 +50,7 @@ class AdminSelectEnfantModal { return name.contains(q) || fn.contains(q) || ln.contains(q); }, itemBuilder: (context, e, onSelect) { - return AdminEnfantUserCard.fromEnfant( + return EnfantUserCard.fromEnfant( e, onCardTap: onSelect, margin: const EdgeInsets.only(bottom: 4), diff --git a/frontend/lib/widgets/admin/common/admin_select_famille_modal.dart b/frontend/lib/widgets/dashboard/select_famille_modal.dart similarity index 88% rename from frontend/lib/widgets/admin/common/admin_select_famille_modal.dart rename to frontend/lib/widgets/dashboard/select_famille_modal.dart index 4fbd3a3..abddc2e 100644 --- a/frontend/lib/widgets/admin/common/admin_select_famille_modal.dart +++ b/frontend/lib/widgets/dashboard/select_famille_modal.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/parent_model.dart'; import 'package:p_tits_pas/services/user_service.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_select_list_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/admin_user_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/select_list_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; /// Foyer / famille sélectionnable pour rattacher un nouvel enfant (#132 / #157). -class AdminFamilleFoyer { +class FamilleFoyer { /// Parent pivot pour `POST /enfants` (`parent_user_id`). final String pivotParentUserId; /// Co-parent éventuel (rattachement foyer #157). @@ -14,7 +14,7 @@ class AdminFamilleFoyer { final String displayTitle; final List parentNames; - const AdminFamilleFoyer({ + const FamilleFoyer({ required this.pivotParentUserId, required this.displayTitle, required this.parentNames, @@ -42,10 +42,10 @@ class AdminFamilleFoyer { } /// Construit la liste des foyers uniques à partir de `GET /parents`. -List buildFamilleFoyers(List parents) { +List buildFamilleFoyers(List parents) { final seenDossiers = {}; final seenUserIds = {}; - final foyers = []; + final foyers = []; for (final p in parents) { final dossier = (p.user.numeroDossier ?? '').trim(); @@ -70,7 +70,7 @@ List buildFamilleFoyers(List parents) { : (names.isNotEmpty ? names.first : 'Famille'); foyers.add( - AdminFamilleFoyer( + FamilleFoyer( pivotParentUserId: p.user.id, coParentUserId: co?.id, numeroDossier: dossier.isNotEmpty ? dossier : null, @@ -87,14 +87,14 @@ List buildFamilleFoyers(List parents) { } /// Sélection d'une famille / dossier pour créer un enfant — ticket #132. -class AdminSelectFamilleModal { - AdminSelectFamilleModal._(); +class SelectFamilleModal { + SelectFamilleModal._(); - static Future show( + static Future show( BuildContext context, { String title = 'Choisir une famille', }) { - return AdminSelectListModal.show( + return SelectListModal.show( context, title: title, searchHint: 'Rechercher par dossier, nom…', @@ -111,7 +111,7 @@ class AdminSelectFamilleModal { return dossier.contains(q) || title.contains(q) || names.contains(q); }, itemBuilder: (context, f, onSelect) { - return AdminUserCard( + return UserCard( title: f.displayTitle, fallbackIcon: Icons.family_restroom, subtitleLines: [ diff --git a/frontend/lib/widgets/admin/common/admin_select_list_modal.dart b/frontend/lib/widgets/dashboard/select_list_modal.dart similarity index 95% rename from frontend/lib/widgets/admin/common/admin_select_list_modal.dart rename to frontend/lib/widgets/dashboard/select_list_modal.dart index 4fdc70c..0335cc7 100644 --- a/frontend/lib/widgets/admin/common/admin_select_list_modal.dart +++ b/frontend/lib/widgets/dashboard/select_list_modal.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; /// Filtre optionnel (switch) sur la même ligne que la barre de recherche. -class AdminSelectToggleFilter { +class SelectToggleFilter { final String label; final bool initialValue; @@ -10,7 +10,7 @@ class AdminSelectToggleFilter { /// [whenEnabled] renvoie `true`. final bool Function(T item) whenEnabled; - const AdminSelectToggleFilter({ + const SelectToggleFilter({ required this.label, required this.whenEnabled, this.initialValue = true, @@ -19,7 +19,7 @@ class AdminSelectToggleFilter { /// Shell générique « rechercher + liste + sélection » pour les modales admin. /// Utilisé par la sélection d'enfant (#146) et la sélection d'AM (#147). -class AdminSelectListModal extends StatefulWidget { +class SelectListModal extends StatefulWidget { final String title; final String searchHint; final Future> Function() loadItems; @@ -40,7 +40,7 @@ class AdminSelectListModal extends StatefulWidget { final int minVisibleCards; /// Switch optionnel à droite du champ de recherche (ex. « Sans garde », « Libre »). - final AdminSelectToggleFilter? toggleFilter; + final SelectToggleFilter? toggleFilter; /// Si fourni, appelé avant de valider la sélection. /// Retourne l'élément à pop (éventuellement rafraîchi), ou `null` pour annuler. @@ -50,7 +50,7 @@ class AdminSelectListModal extends StatefulWidget { Future Function() reload, )? resolveSelect; - const AdminSelectListModal({ + const SelectListModal({ super.key, required this.title, required this.loadItems, @@ -82,7 +82,7 @@ class AdminSelectListModal extends StatefulWidget { double modalWidth = 930, double cardExtent = 52, int minVisibleCards = 8, - AdminSelectToggleFilter? toggleFilter, + SelectToggleFilter? toggleFilter, Future Function( BuildContext context, T item, @@ -91,7 +91,7 @@ class AdminSelectListModal extends StatefulWidget { }) { return showDialog( context: context, - builder: (ctx) => AdminSelectListModal( + builder: (ctx) => SelectListModal( title: title, loadItems: loadItems, matchesQuery: matchesQuery, @@ -109,11 +109,11 @@ class AdminSelectListModal extends StatefulWidget { } @override - State> createState() => - _AdminSelectListModalState(); + State> createState() => + _SelectListModalState(); } -class _AdminSelectListModalState extends State> { +class _SelectListModalState extends State> { final _searchCtrl = TextEditingController(); List _all = []; bool _loading = true; diff --git a/frontend/lib/widgets/admin/common/admin_status_capsule.dart b/frontend/lib/widgets/dashboard/status_capsule.dart similarity index 95% rename from frontend/lib/widgets/admin/common/admin_status_capsule.dart rename to frontend/lib/widgets/dashboard/status_capsule.dart index a42b015..e22b665 100644 --- a/frontend/lib/widgets/admin/common/admin_status_capsule.dart +++ b/frontend/lib/widgets/dashboard/status_capsule.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; /// Gélule de sélection du statut utilisateur (fiches admin parent / AM). -class AdminStatusCapsule extends StatelessWidget { +class StatusCapsule extends StatelessWidget { final String statut; final ValueChanged? onChanged; static const statuts = ['actif', 'en_attente', 'suspendu', 'refuse']; - const AdminStatusCapsule({ + const StatusCapsule({ super.key, required this.statut, this.onChanged, diff --git a/frontend/lib/widgets/admin/common/admin_user_card.dart b/frontend/lib/widgets/dashboard/user_card.dart similarity index 97% rename from frontend/lib/widgets/admin/common/admin_user_card.dart rename to frontend/lib/widgets/dashboard/user_card.dart index 640d293..07798dd 100644 --- a/frontend/lib/widgets/admin/common/admin_user_card.dart +++ b/frontend/lib/widgets/dashboard/user_card.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/services/api/api_config.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; -class AdminUserCard extends StatefulWidget { +class UserCard extends StatefulWidget { final String title; final List subtitleLines; final String? avatarUrl; @@ -21,7 +21,7 @@ class AdminUserCard extends StatefulWidget { final EdgeInsetsGeometry? margin; final EdgeInsetsGeometry? contentPadding; - const AdminUserCard({ + const UserCard({ super.key, required this.title, required this.subtitleLines, @@ -41,10 +41,10 @@ class AdminUserCard extends StatefulWidget { }); @override - State createState() => _AdminUserCardState(); + State createState() => _UserCardState(); } -class _AdminUserCardState extends State { +class _UserCardState extends State { bool _isHovered = false; @override diff --git a/frontend/lib/widgets/admin/common/admin_list_state.dart b/frontend/lib/widgets/dashboard/user_list_state.dart similarity index 92% rename from frontend/lib/widgets/admin/common/admin_list_state.dart rename to frontend/lib/widgets/dashboard/user_list_state.dart index 41b497c..d7b9526 100644 --- a/frontend/lib/widgets/admin/common/admin_list_state.dart +++ b/frontend/lib/widgets/dashboard/user_list_state.dart @@ -1,13 +1,13 @@ import 'package:flutter/material.dart'; -class AdminListState extends StatelessWidget { +class UserListState extends StatelessWidget { final bool isLoading; final String? error; final bool isEmpty; final String emptyMessage; final Widget list; - const AdminListState({ + const UserListState({ super.key, required this.isLoading, required this.error, diff --git a/frontend/lib/widgets/admin/dashboard_admin.dart b/frontend/lib/widgets/dashboard/user_management_sub_bar.dart similarity index 100% rename from frontend/lib/widgets/admin/dashboard_admin.dart rename to frontend/lib/widgets/dashboard/user_management_sub_bar.dart From b474842e19e75732e3e9ff65b11de3a25e4a9bfd Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Mon, 14 Sep 2026 11:05:23 +0200 Subject: [PATCH 2/3] =?UTF-8?q?refactor(#155):=20phase=202=20=E2=80=94=20p?= =?UTF-8?q?anels=20staff=20sous=20widgets/dashboard/.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Déplace les panels/wizards/validation/common partagés hors de widgets/admin/ ; ne conserve que AdminManagementWidget (variante A). Co-authored-by: Cursor --- .../administrateurs/admin_dashboardScreen.dart | 4 ++-- .../administrateurs/creation/admin_create.dart | 2 +- .../creation/gestionnaires_create.dart | 2 +- .../gestionnaire_dashboard_screen.dart | 2 +- .../lib/widgets/admin/admin_management_widget.dart | 4 ++-- frontend/lib/widgets/common/identity_block.dart | 2 +- .../am_dossier_create_modal.dart | 2 +- .../{admin => dashboard}/am_dossier_wizard.dart | 8 ++++---- frontend/lib/widgets/dashboard/am_edit_modal.dart | 4 ++-- .../assistante_maternelle_management_widget.dart | 4 ++-- .../lib/widgets/dashboard/child_detail_modal.dart | 6 +++--- .../common/suppression_confirm_dialog.dart | 0 .../{admin => dashboard}/common/user_list.dart | 0 .../common/validation_detail_section.dart | 0 .../{admin => dashboard}/dossier_list_card.dart | 2 +- .../dossiers_management_widget.dart | 8 ++++---- .../enfant_management_widget.dart | 4 ++-- .../gestionnaire_management_widget.dart | 4 ++-- .../{admin => dashboard}/parametres_panel.dart | 2 +- .../parent_dossier_create_modal.dart | 2 +- .../parent_dossier_wizard.dart | 8 ++++---- .../lib/widgets/dashboard/parent_edit_modal.dart | 2 +- .../parent_managmant_widget.dart | 4 ++-- .../pending_validation_widget.dart | 6 +++--- .../relais_management_panel.dart | 2 +- .../lib/widgets/dashboard/select_am_modal.dart | 2 +- .../lib/widgets/dashboard/select_list_modal.dart | 2 +- .../user_management_panel.dart | 14 +++++++------- .../{admin => dashboard}/validation_am_wizard.dart | 2 +- .../validation_dossier_modal.dart | 8 ++++---- .../validation_family_wizard.dart | 2 +- .../validation_modal_theme.dart | 0 .../validation_refus_form.dart | 0 .../validation_valider_confirm_dialog.dart | 0 34 files changed, 57 insertions(+), 57 deletions(-) rename frontend/lib/widgets/{admin => dashboard}/am_dossier_create_modal.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/am_dossier_wizard.dart (99%) rename frontend/lib/widgets/{admin => dashboard}/assistante_maternelle_management_widget.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/common/suppression_confirm_dialog.dart (100%) rename frontend/lib/widgets/{admin => dashboard}/common/user_list.dart (100%) rename frontend/lib/widgets/{admin => dashboard}/common/validation_detail_section.dart (100%) rename frontend/lib/widgets/{admin => dashboard}/dossier_list_card.dart (96%) rename frontend/lib/widgets/{admin => dashboard}/dossiers_management_widget.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/enfant_management_widget.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/gestionnaire_management_widget.dart (96%) rename frontend/lib/widgets/{admin => dashboard}/parametres_panel.dart (99%) rename frontend/lib/widgets/{admin => dashboard}/parent_dossier_create_modal.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/parent_dossier_wizard.dart (99%) rename frontend/lib/widgets/{admin => dashboard}/parent_managmant_widget.dart (97%) rename frontend/lib/widgets/{admin => dashboard}/pending_validation_widget.dart (98%) rename frontend/lib/widgets/{admin => dashboard}/relais_management_panel.dart (99%) rename frontend/lib/widgets/{admin => dashboard}/user_management_panel.dart (95%) rename frontend/lib/widgets/{admin => dashboard}/validation_am_wizard.dart (91%) rename frontend/lib/widgets/{admin => dashboard}/validation_dossier_modal.dart (95%) rename frontend/lib/widgets/{admin => dashboard}/validation_family_wizard.dart (91%) rename frontend/lib/widgets/{admin => dashboard}/validation_modal_theme.dart (100%) rename frontend/lib/widgets/{admin => dashboard}/validation_refus_form.dart (100%) rename frontend/lib/widgets/{admin => dashboard}/validation_valider_confirm_dialog.dart (100%) diff --git a/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart b/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart index 43c6f97..9cad77d 100644 --- a/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart +++ b/frontend/lib/screens/administrateurs/admin_dashboardScreen.dart @@ -3,8 +3,8 @@ import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/configuration_service.dart'; import 'package:p_tits_pas/widgets/dashboard/user_management_sub_bar.dart'; -import 'package:p_tits_pas/widgets/admin/parametres_panel.dart'; -import 'package:p_tits_pas/widgets/admin/user_management_panel.dart'; +import 'package:p_tits_pas/widgets/dashboard/parametres_panel.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_management_panel.dart'; import 'package:p_tits_pas/widgets/app_footer.dart'; import 'package:p_tits_pas/widgets/dashboard/dashboard_bandeau.dart'; diff --git a/frontend/lib/screens/administrateurs/creation/admin_create.dart b/frontend/lib/screens/administrateurs/creation/admin_create.dart index 1334519..e18d202 100644 --- a/frontend/lib/screens/administrateurs/creation/admin_create.dart +++ b/frontend/lib/screens/administrateurs/creation/admin_create.dart @@ -3,7 +3,7 @@ import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/email_utils.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/email_text_field.dart'; import 'package:p_tits_pas/widgets/french_phone_field.dart'; diff --git a/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart b/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart index 38b67e2..89c1d55 100644 --- a/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart +++ b/frontend/lib/screens/administrateurs/creation/gestionnaires_create.dart @@ -9,7 +9,7 @@ import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/relais_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; class AdminUserFormDialog extends StatefulWidget { final AppUser? initialUser; diff --git a/frontend/lib/screens/gestionnaire/gestionnaire_dashboard_screen.dart b/frontend/lib/screens/gestionnaire/gestionnaire_dashboard_screen.dart index 2b2ccf5..bcf5542 100644 --- a/frontend/lib/screens/gestionnaire/gestionnaire_dashboard_screen.dart +++ b/frontend/lib/screens/gestionnaire/gestionnaire_dashboard_screen.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/services/auth_service.dart'; -import 'package:p_tits_pas/widgets/admin/user_management_panel.dart'; +import 'package:p_tits_pas/widgets/dashboard/user_management_panel.dart'; import 'package:p_tits_pas/widgets/app_footer.dart'; import 'package:p_tits_pas/widgets/dashboard/dashboard_bandeau.dart'; diff --git a/frontend/lib/widgets/admin/admin_management_widget.dart b/frontend/lib/widgets/admin/admin_management_widget.dart index 3538efc..facaa8b 100644 --- a/frontend/lib/widgets/admin/admin_management_widget.dart +++ b/frontend/lib/widgets/admin/admin_management_widget.dart @@ -6,8 +6,8 @@ import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/user_list.dart'; class AdminManagementWidget extends StatefulWidget { final String searchQuery; diff --git a/frontend/lib/widgets/common/identity_block.dart b/frontend/lib/widgets/common/identity_block.dart index 2aee3e8..d0b7e68 100644 --- a/frontend/lib/widgets/common/identity_block.dart +++ b/frontend/lib/widgets/common/identity_block.dart @@ -3,7 +3,7 @@ import 'package:p_tits_pas/models/dossier_unifie.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/utils/name_format_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; -import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/validation_detail_section.dart'; /// Valeurs affichées dans un [IdentityBlock] en lecture seule. class IdentityValues { diff --git a/frontend/lib/widgets/admin/am_dossier_create_modal.dart b/frontend/lib/widgets/dashboard/am_dossier_create_modal.dart similarity index 97% rename from frontend/lib/widgets/admin/am_dossier_create_modal.dart rename to frontend/lib/widgets/dashboard/am_dossier_create_modal.dart index f221d93..1f463e6 100644 --- a/frontend/lib/widgets/admin/am_dossier_create_modal.dart +++ b/frontend/lib/widgets/dashboard/am_dossier_create_modal.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:p_tits_pas/widgets/admin/am_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_dossier_wizard.dart'; /// Modale de création dossier AM (#156) — même shell que [ValidationDossierModal]. class AmDossierCreateModal extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/am_dossier_wizard.dart b/frontend/lib/widgets/dashboard/am_dossier_wizard.dart similarity index 99% rename from frontend/lib/widgets/admin/am_dossier_wizard.dart rename to frontend/lib/widgets/dashboard/am_dossier_wizard.dart index e8f8b19..0efd238 100644 --- a/frontend/lib/widgets/admin/am_dossier_wizard.dart +++ b/frontend/lib/widgets/dashboard/am_dossier_wizard.dart @@ -16,10 +16,10 @@ import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/utils/postal_utils.dart'; import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; import 'package:p_tits_pas/widgets/dashboard/detail_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; -import 'package:p_tits_pas/widgets/admin/validation_refus_form.dart'; -import 'package:p_tits_pas/widgets/admin/validation_valider_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/validation_detail_section.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_refus_form.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_valider_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; diff --git a/frontend/lib/widgets/dashboard/am_edit_modal.dart b/frontend/lib/widgets/dashboard/am_edit_modal.dart index 1ee2cf1..900df65 100644 --- a/frontend/lib/widgets/dashboard/am_edit_modal.dart +++ b/frontend/lib/widgets/dashboard/am_edit_modal.dart @@ -12,9 +12,9 @@ import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/select_enfant_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/status_capsule.dart'; -import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/validation_detail_section.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; /// Fiche AM éditable (ticket #131) — identité | fiche pro (photo) | enfants. class AmEditModal extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart b/frontend/lib/widgets/dashboard/assistante_maternelle_management_widget.dart similarity index 97% rename from frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart rename to frontend/lib/widgets/dashboard/assistante_maternelle_management_widget.dart index 8da3c30..8d8958a 100644 --- a/frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart +++ b/frontend/lib/widgets/dashboard/assistante_maternelle_management_widget.dart @@ -7,8 +7,8 @@ import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; import 'package:p_tits_pas/widgets/dashboard/am_edit_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/user_list.dart'; class AssistanteMaternelleManagementWidget extends StatefulWidget { final String searchQuery; diff --git a/frontend/lib/widgets/dashboard/child_detail_modal.dart b/frontend/lib/widgets/dashboard/child_detail_modal.dart index 3701b27..087c374 100644 --- a/frontend/lib/widgets/dashboard/child_detail_modal.dart +++ b/frontend/lib/widgets/dashboard/child_detail_modal.dart @@ -16,9 +16,9 @@ import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; import 'package:p_tits_pas/widgets/dashboard/parent_edit_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/select_am_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/select_famille_modal.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/validation_detail_section.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; /// Fiche enfant consultation / édition (#138) ou création (#132). diff --git a/frontend/lib/widgets/admin/common/suppression_confirm_dialog.dart b/frontend/lib/widgets/dashboard/common/suppression_confirm_dialog.dart similarity index 100% rename from frontend/lib/widgets/admin/common/suppression_confirm_dialog.dart rename to frontend/lib/widgets/dashboard/common/suppression_confirm_dialog.dart diff --git a/frontend/lib/widgets/admin/common/user_list.dart b/frontend/lib/widgets/dashboard/common/user_list.dart similarity index 100% rename from frontend/lib/widgets/admin/common/user_list.dart rename to frontend/lib/widgets/dashboard/common/user_list.dart diff --git a/frontend/lib/widgets/admin/common/validation_detail_section.dart b/frontend/lib/widgets/dashboard/common/validation_detail_section.dart similarity index 100% rename from frontend/lib/widgets/admin/common/validation_detail_section.dart rename to frontend/lib/widgets/dashboard/common/validation_detail_section.dart diff --git a/frontend/lib/widgets/admin/dossier_list_card.dart b/frontend/lib/widgets/dashboard/dossier_list_card.dart similarity index 96% rename from frontend/lib/widgets/admin/dossier_list_card.dart rename to frontend/lib/widgets/dashboard/dossier_list_card.dart index ad66e88..149eec1 100644 --- a/frontend/lib/widgets/admin/dossier_list_card.dart +++ b/frontend/lib/widgets/dashboard/dossier_list_card.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; /// Carte dossier unifiée (#153) — fond neutre, accent couleur sur l’icône. class DossierListCard extends StatelessWidget { diff --git a/frontend/lib/widgets/admin/dossiers_management_widget.dart b/frontend/lib/widgets/dashboard/dossiers_management_widget.dart similarity index 97% rename from frontend/lib/widgets/admin/dossiers_management_widget.dart rename to frontend/lib/widgets/dashboard/dossiers_management_widget.dart index a616525..74e9475 100644 --- a/frontend/lib/widgets/admin/dossiers_management_widget.dart +++ b/frontend/lib/widgets/dashboard/dossiers_management_widget.dart @@ -3,10 +3,10 @@ import 'package:p_tits_pas/models/dossier_list_item.dart'; import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; -import 'package:p_tits_pas/widgets/admin/dossier_list_card.dart'; -import 'package:p_tits_pas/widgets/admin/pending_validation_widget.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/validation_dossier_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/dossier_list_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/pending_validation_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_dossier_modal.dart'; /// Onglet permanent « Dossiers » (#153) : pending en haut + liste unifiée en bas. class DossiersManagementWidget extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/enfant_management_widget.dart b/frontend/lib/widgets/dashboard/enfant_management_widget.dart similarity index 97% rename from frontend/lib/widgets/admin/enfant_management_widget.dart rename to frontend/lib/widgets/dashboard/enfant_management_widget.dart index 61f2ce9..0b5d957 100644 --- a/frontend/lib/widgets/admin/enfant_management_widget.dart +++ b/frontend/lib/widgets/dashboard/enfant_management_widget.dart @@ -7,8 +7,8 @@ import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/enfant_user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/user_list.dart'; /// Onglet liste globale des enfants (doc 28 §6.2, ticket #137). class EnfantManagementWidget extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/gestionnaire_management_widget.dart b/frontend/lib/widgets/dashboard/gestionnaire_management_widget.dart similarity index 96% rename from frontend/lib/widgets/admin/gestionnaire_management_widget.dart rename to frontend/lib/widgets/dashboard/gestionnaire_management_widget.dart index 468f43f..3e824e7 100644 --- a/frontend/lib/widgets/admin/gestionnaire_management_widget.dart +++ b/frontend/lib/widgets/dashboard/gestionnaire_management_widget.dart @@ -5,8 +5,8 @@ import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/user_list.dart'; class GestionnaireManagementWidget extends StatefulWidget { final String searchQuery; diff --git a/frontend/lib/widgets/admin/parametres_panel.dart b/frontend/lib/widgets/dashboard/parametres_panel.dart similarity index 99% rename from frontend/lib/widgets/admin/parametres_panel.dart rename to frontend/lib/widgets/dashboard/parametres_panel.dart index b99fd50..1f3612f 100644 --- a/frontend/lib/widgets/admin/parametres_panel.dart +++ b/frontend/lib/widgets/dashboard/parametres_panel.dart @@ -2,7 +2,7 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:p_tits_pas/services/configuration_service.dart'; import 'package:p_tits_pas/utils/email_utils.dart'; -import 'package:p_tits_pas/widgets/admin/relais_management_panel.dart'; +import 'package:p_tits_pas/widgets/dashboard/relais_management_panel.dart'; /// Panneau Paramètres admin : Email (SMTP), Personnalisation, Avancé. class ParametresPanel extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/parent_dossier_create_modal.dart b/frontend/lib/widgets/dashboard/parent_dossier_create_modal.dart similarity index 97% rename from frontend/lib/widgets/admin/parent_dossier_create_modal.dart rename to frontend/lib/widgets/dashboard/parent_dossier_create_modal.dart index 10f1126..55ba4bc 100644 --- a/frontend/lib/widgets/admin/parent_dossier_create_modal.dart +++ b/frontend/lib/widgets/dashboard/parent_dossier_create_modal.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:p_tits_pas/widgets/admin/parent_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_dossier_wizard.dart'; /// Modale de création dossier famille (#129) — même shell que [AmDossierCreateModal]. class ParentDossierCreateModal extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/parent_dossier_wizard.dart b/frontend/lib/widgets/dashboard/parent_dossier_wizard.dart similarity index 99% rename from frontend/lib/widgets/admin/parent_dossier_wizard.dart rename to frontend/lib/widgets/dashboard/parent_dossier_wizard.dart index e50ca2a..fd2d289 100644 --- a/frontend/lib/widgets/admin/parent_dossier_wizard.dart +++ b/frontend/lib/widgets/dashboard/parent_dossier_wizard.dart @@ -15,10 +15,10 @@ import 'package:p_tits_pas/utils/name_format_utils.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/utils/postal_utils.dart'; import 'package:p_tits_pas/widgets/dashboard/am_photo_frame.dart'; -import 'package:p_tits_pas/widgets/admin/common/validation_detail_section.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; -import 'package:p_tits_pas/widgets/admin/validation_refus_form.dart'; -import 'package:p_tits_pas/widgets/admin/validation_valider_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/validation_detail_section.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_refus_form.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_valider_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/common/auth_network_image.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; diff --git a/frontend/lib/widgets/dashboard/parent_edit_modal.dart b/frontend/lib/widgets/dashboard/parent_edit_modal.dart index c3c7093..75a6633 100644 --- a/frontend/lib/widgets/dashboard/parent_edit_modal.dart +++ b/frontend/lib/widgets/dashboard/parent_edit_modal.dart @@ -9,7 +9,7 @@ import 'package:p_tits_pas/widgets/dashboard/children_affiliation_panel.dart'; import 'package:p_tits_pas/widgets/dashboard/select_enfant_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/status_capsule.dart'; import 'package:p_tits_pas/widgets/common/identity_block.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; /// Fiche parent éditable (doc 28 §6.1, tickets #131 / #138). /// Shell et typo alignés sur [ValidationDossierModal] / wizards validation. diff --git a/frontend/lib/widgets/admin/parent_managmant_widget.dart b/frontend/lib/widgets/dashboard/parent_managmant_widget.dart similarity index 97% rename from frontend/lib/widgets/admin/parent_managmant_widget.dart rename to frontend/lib/widgets/dashboard/parent_managmant_widget.dart index 96d912a..938b5fc 100644 --- a/frontend/lib/widgets/admin/parent_managmant_widget.dart +++ b/frontend/lib/widgets/dashboard/parent_managmant_widget.dart @@ -6,8 +6,8 @@ import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/utils/staff_deletion_rights.dart'; import 'package:p_tits_pas/widgets/dashboard/parent_edit_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/common/user_list.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/user_list.dart'; class ParentManagementWidget extends StatefulWidget { final String searchQuery; diff --git a/frontend/lib/widgets/admin/pending_validation_widget.dart b/frontend/lib/widgets/dashboard/pending_validation_widget.dart similarity index 98% rename from frontend/lib/widgets/admin/pending_validation_widget.dart rename to frontend/lib/widgets/dashboard/pending_validation_widget.dart index 4a71085..1adbdcf 100644 --- a/frontend/lib/widgets/admin/pending_validation_widget.dart +++ b/frontend/lib/widgets/dashboard/pending_validation_widget.dart @@ -3,9 +3,9 @@ import 'package:p_tits_pas/models/dossier_list_item.dart'; import 'package:p_tits_pas/models/user.dart'; import 'package:p_tits_pas/models/pending_family.dart'; import 'package:p_tits_pas/services/user_service.dart'; -import 'package:p_tits_pas/widgets/admin/dossier_list_card.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; -import 'package:p_tits_pas/widgets/admin/validation_dossier_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/dossier_list_card.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_dossier_modal.dart'; /// Section « dossiers à valider » (liste unifiée AM + familles). Ticket #107 / #153. class PendingValidationWidget extends StatefulWidget { diff --git a/frontend/lib/widgets/admin/relais_management_panel.dart b/frontend/lib/widgets/dashboard/relais_management_panel.dart similarity index 99% rename from frontend/lib/widgets/admin/relais_management_panel.dart rename to frontend/lib/widgets/dashboard/relais_management_panel.dart index f63b5fe..17275f8 100644 --- a/frontend/lib/widgets/admin/relais_management_panel.dart +++ b/frontend/lib/widgets/dashboard/relais_management_panel.dart @@ -3,7 +3,7 @@ import 'package:flutter/services.dart'; import 'package:p_tits_pas/models/relais_model.dart'; import 'package:p_tits_pas/utils/phone_utils.dart'; import 'package:p_tits_pas/services/relais_service.dart'; -import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; +import 'package:p_tits_pas/widgets/dashboard/common/suppression_confirm_dialog.dart'; class RelaisManagementPanel extends StatefulWidget { const RelaisManagementPanel({super.key}); diff --git a/frontend/lib/widgets/dashboard/select_am_modal.dart b/frontend/lib/widgets/dashboard/select_am_modal.dart index b35c5a7..c0bb7c3 100644 --- a/frontend/lib/widgets/dashboard/select_am_modal.dart +++ b/frontend/lib/widgets/dashboard/select_am_modal.dart @@ -6,7 +6,7 @@ import 'package:p_tits_pas/utils/am_vigilance.dart'; import 'package:p_tits_pas/widgets/dashboard/am_edit_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/select_list_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/user_card.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; List _amSelectSubtitleLines(AssistanteMaternelleModel am) { final lines = []; diff --git a/frontend/lib/widgets/dashboard/select_list_modal.dart b/frontend/lib/widgets/dashboard/select_list_modal.dart index 0335cc7..758859f 100644 --- a/frontend/lib/widgets/dashboard/select_list_modal.dart +++ b/frontend/lib/widgets/dashboard/select_list_modal.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:p_tits_pas/widgets/admin/validation_modal_theme.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_modal_theme.dart'; /// Filtre optionnel (switch) sur la même ligne que la barre de recherche. class SelectToggleFilter { diff --git a/frontend/lib/widgets/admin/user_management_panel.dart b/frontend/lib/widgets/dashboard/user_management_panel.dart similarity index 95% rename from frontend/lib/widgets/admin/user_management_panel.dart rename to frontend/lib/widgets/dashboard/user_management_panel.dart index 270cee3..800435c 100644 --- a/frontend/lib/widgets/admin/user_management_panel.dart +++ b/frontend/lib/widgets/dashboard/user_management_panel.dart @@ -1,15 +1,15 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/screens/administrateurs/creation/gestionnaires_create.dart'; import 'package:p_tits_pas/widgets/admin/admin_management_widget.dart'; -import 'package:p_tits_pas/widgets/admin/am_dossier_create_modal.dart'; -import 'package:p_tits_pas/widgets/admin/assistante_maternelle_management_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_dossier_create_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/assistante_maternelle_management_widget.dart'; import 'package:p_tits_pas/widgets/dashboard/child_detail_modal.dart'; import 'package:p_tits_pas/widgets/dashboard/user_management_sub_bar.dart'; -import 'package:p_tits_pas/widgets/admin/dossiers_management_widget.dart'; -import 'package:p_tits_pas/widgets/admin/enfant_management_widget.dart'; -import 'package:p_tits_pas/widgets/admin/gestionnaire_management_widget.dart'; -import 'package:p_tits_pas/widgets/admin/parent_dossier_create_modal.dart'; -import 'package:p_tits_pas/widgets/admin/parent_managmant_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/dossiers_management_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/enfant_management_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/gestionnaire_management_widget.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_dossier_create_modal.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_managmant_widget.dart'; class UserManagementPanel extends StatefulWidget { /// Afficher l'onglet Administrateurs (sinon sans Administrateurs). diff --git a/frontend/lib/widgets/admin/validation_am_wizard.dart b/frontend/lib/widgets/dashboard/validation_am_wizard.dart similarity index 91% rename from frontend/lib/widgets/admin/validation_am_wizard.dart rename to frontend/lib/widgets/dashboard/validation_am_wizard.dart index 0edc9ac..315fec4 100644 --- a/frontend/lib/widgets/admin/validation_am_wizard.dart +++ b/frontend/lib/widgets/dashboard/validation_am_wizard.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/dossier_unifie.dart'; -import 'package:p_tits_pas/widgets/admin/am_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_dossier_wizard.dart'; /// Wrapper historique (#107) — délègue à [AmDossierWizard.review]. class ValidationAmWizard extends StatelessWidget { diff --git a/frontend/lib/widgets/admin/validation_dossier_modal.dart b/frontend/lib/widgets/dashboard/validation_dossier_modal.dart similarity index 95% rename from frontend/lib/widgets/admin/validation_dossier_modal.dart rename to frontend/lib/widgets/dashboard/validation_dossier_modal.dart index fefac12..d17b4b5 100644 --- a/frontend/lib/widgets/admin/validation_dossier_modal.dart +++ b/frontend/lib/widgets/dashboard/validation_dossier_modal.dart @@ -1,10 +1,10 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/dossier_unifie.dart'; import 'package:p_tits_pas/services/user_service.dart'; -import 'package:p_tits_pas/widgets/admin/am_dossier_wizard.dart'; -import 'package:p_tits_pas/widgets/admin/parent_dossier_wizard.dart'; -import 'package:p_tits_pas/widgets/admin/validation_am_wizard.dart'; -import 'package:p_tits_pas/widgets/admin/validation_family_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/am_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_am_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/validation_family_wizard.dart'; /// Modale (dialog) : charge le dossier par numéro puis affiche le wizard AM ou Famille. /// Ticket #107 / #119 (review), #135 (`openAsEdit`). diff --git a/frontend/lib/widgets/admin/validation_family_wizard.dart b/frontend/lib/widgets/dashboard/validation_family_wizard.dart similarity index 91% rename from frontend/lib/widgets/admin/validation_family_wizard.dart rename to frontend/lib/widgets/dashboard/validation_family_wizard.dart index f72fc4b..a426f4d 100644 --- a/frontend/lib/widgets/admin/validation_family_wizard.dart +++ b/frontend/lib/widgets/dashboard/validation_family_wizard.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:p_tits_pas/models/dossier_unifie.dart'; -import 'package:p_tits_pas/widgets/admin/parent_dossier_wizard.dart'; +import 'package:p_tits_pas/widgets/dashboard/parent_dossier_wizard.dart'; /// Wrapper historique (#107) — délègue à [ParentDossierWizard.review]. class ValidationFamilyWizard extends StatelessWidget { diff --git a/frontend/lib/widgets/admin/validation_modal_theme.dart b/frontend/lib/widgets/dashboard/validation_modal_theme.dart similarity index 100% rename from frontend/lib/widgets/admin/validation_modal_theme.dart rename to frontend/lib/widgets/dashboard/validation_modal_theme.dart diff --git a/frontend/lib/widgets/admin/validation_refus_form.dart b/frontend/lib/widgets/dashboard/validation_refus_form.dart similarity index 100% rename from frontend/lib/widgets/admin/validation_refus_form.dart rename to frontend/lib/widgets/dashboard/validation_refus_form.dart diff --git a/frontend/lib/widgets/admin/validation_valider_confirm_dialog.dart b/frontend/lib/widgets/dashboard/validation_valider_confirm_dialog.dart similarity index 100% rename from frontend/lib/widgets/admin/validation_valider_confirm_dialog.dart rename to frontend/lib/widgets/dashboard/validation_valider_confirm_dialog.dart From 939e7777ac5ede2170802e6825bdba456cefd5b0 Mon Sep 17 00:00:00 2001 From: Julien Martin Date: Mon, 14 Sep 2026 11:05:47 +0200 Subject: [PATCH 3/3] =?UTF-8?q?docs(#155):=20mini-spec=20phase=202=20?= =?UTF-8?q?=E2=80=94=20move=20panels=20admin=20=E2=86=92=20dashboard.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Cursor --- docs/tmp/155-mini-spec-rename-admin-prefix.md | 4 +- ...55-suite-move-admin-panels-to-dashboard.md | 203 ++++++++++++++++++ 2 files changed, 206 insertions(+), 1 deletion(-) create mode 100644 docs/tmp/155-suite-move-admin-panels-to-dashboard.md diff --git a/docs/tmp/155-mini-spec-rename-admin-prefix.md b/docs/tmp/155-mini-spec-rename-admin-prefix.md index dc8344b..afe3c4f 100644 --- a/docs/tmp/155-mini-spec-rename-admin-prefix.md +++ b/docs/tmp/155-mini-spec-rename-admin-prefix.md @@ -37,7 +37,9 @@ On garde `Admin*` seulement là où c’est vraiment le rôle administrateur. | `admin_detail_modal` → `AdminDetailModal` / `AdminDetailField` | `detail_modal` → `DetailModal` / `DetailField` | | `dashboard_admin.dart` | `user_management_sub_bar.dart` (`DashboardUserManagementSubBar` inchangé) | -Dossier `widgets/admin/` conserve les panels métier (`user_management_panel`, wizards, etc.) + `AdminManagementWidget`. +Dossier `widgets/admin/` conserve encore les panels métier (`user_management_panel`, wizards, etc.) + `AdminManagementWidget`. + +**Phase 2** (même ticket #155) : déplacer ces panels → `widgets/dashboard/` — voir [155-suite-move-admin-panels-to-dashboard.md](./155-suite-move-admin-panels-to-dashboard.md). ## Hors scope diff --git a/docs/tmp/155-suite-move-admin-panels-to-dashboard.md b/docs/tmp/155-suite-move-admin-panels-to-dashboard.md new file mode 100644 index 0000000..e5a86db --- /dev/null +++ b/docs/tmp/155-suite-move-admin-panels-to-dashboard.md @@ -0,0 +1,203 @@ +# Mini-spec — Déplacer les panels `widgets/admin/` → `widgets/dashboard/` + +**Ticket** : **#155** (phase 2 — même ticket que le rename `Admin*`) +**Phase 1** : widgets `Admin*` → `widgets/dashboard/` (déjà sur `feature/155-rename-admin-prefix-dashboard`) +**Branche** : poursuivre / rebaser `feature/155-rename-admin-prefix-dashboard` (ou nouvelle branche depuis `develop` après merge phase 1) +**Nature** : rename / move mécanique — **zéro** changement UX / métier + +--- + +## Contexte + +Après la phase 1 (#155), la situation est **hybride** : + +| Emplacement | Contenu | +|-------------|---------| +| `widgets/dashboard/` | Composants partagés sans préfixe `Admin*` (modales, cartes, selects, sub-bar…) | +| `widgets/admin/` | **Panels** du dashboard staff (listes, wizards, validation, shell `UserManagementPanel`…) + `AdminManagementWidget` | + +Le dossier `admin/` laisse encore croire « réservé administrateur », alors que **gestionnaire** consomme les mêmes panels (`GestionnaireDashboardScreen` → `UserManagementPanel`). + +Ce ticket **termine l’option C** au niveau dossier : tout le dashboard staff vit sous `widgets/dashboard/`, sauf ce qui est **vraiment** rôle admin. + +--- + +## Objectif + +``` +frontend/lib/widgets/admin/ + ↓ git mv + update imports +frontend/lib/widgets/dashboard/… +``` + +Critère : un nouveau dev ne doit plus ouvrir `widgets/admin/` pour du code partagé admin+gestionnaire. + +--- + +## Cible d’arborescence (proposée) + +``` +widgets/dashboard/ + ├── (déjà là #155) child_detail_modal.dart, am_edit_modal.dart, user_card.dart, … + ├── user_management_panel.dart ← shell onglets + ├── user_management_sub_bar.dart ← déjà déplacé #155 + ├── dossiers_management_widget.dart + ├── dossier_list_card.dart + ├── parent_management_widget.dart ← corriger le typo managmant au passage ? + ├── enfant_management_widget.dart + ├── assistante_maternelle_management_widget.dart + ├── gestionnaire_management_widget.dart + ├── pending_validation_widget.dart + ├── parent_dossier_create_modal.dart + ├── parent_dossier_wizard.dart + ├── am_dossier_create_modal.dart + ├── am_dossier_wizard.dart + ├── validation_*.dart ← family/am wizards, refus, theme, confirm + ├── parametres_panel.dart ← utilisé par écran admin (OK dans dashboard) + ├── relais_management_panel.dart + ├── common/ ← sous-dossier optionnel + │ ├── suppression_confirm_dialog.dart + │ ├── user_list.dart + │ └── validation_detail_section.dart + └── … + +widgets/admin/ ← mince, rôle admin seulement + └── admin_management_widget.dart ← onglet Administrateurs +``` + +### Variante B (plus stricte) + +`AdminManagementWidget` + éventuels helpers purement admin → +`screens/administrateurs/widgets/` +et **suppression** du dossier `widgets/admin/`. + +**Reco** : **variante A** (garder `widgets/admin/` minimal avec seulement `AdminManagementWidget`) — moins de churn screens, clair. + +--- + +## Inventaire à déplacer (état actuel) + +### Racine `widgets/admin/` → `widgets/dashboard/` + +| Fichier actuel | Notes | +|----------------|--------| +| `user_management_panel.dart` | Shell partagé admin + gestionnaire | +| `dossiers_management_widget.dart` | | +| `dossier_list_card.dart` | | +| `parent_managmant_widget.dart` | Typo historique `managmant` — **option** : renommer → `parent_management_widget.dart` dans le même ticket ou ticket typo séparé | +| `enfant_management_widget.dart` | | +| `assistante_maternelle_management_widget.dart` | | +| `gestionnaire_management_widget.dart` | | +| `pending_validation_widget.dart` | | +| `parent_dossier_create_modal.dart` | | +| `parent_dossier_wizard.dart` | | +| `am_dossier_create_modal.dart` | | +| `am_dossier_wizard.dart` | | +| `validation_am_wizard.dart` | | +| `validation_family_wizard.dart` | | +| `validation_dossier_modal.dart` | | +| `validation_modal_theme.dart` | | +| `validation_refus_form.dart` | | +| `validation_valider_confirm_dialog.dart` | | +| `parametres_panel.dart` | Écran admin seulement, mais pas préfixé Admin — OK dashboard | +| `relais_management_panel.dart` | | + +### `widgets/admin/common/` → `widgets/dashboard/common/` (ou plat) + +| Fichier | Notes | +|---------|--------| +| `suppression_confirm_dialog.dart` | Partagé (y compris `screens/administrateurs/creation/*`) | +| `user_list.dart` | | +| `validation_detail_section.dart` | | + +### **Ne pas** déplacer + +| Fichier | Destination | +|---------|-------------| +| `admin_management_widget.dart` | Reste `widgets/admin/` (ou variante B → screens) | + +### Déjà fait (#155) — ne pas retraiter + +Tout ce qui est déjà sous `widgets/dashboard/` (`child_detail_modal`, `am_edit_modal`, `user_card`, `select_*`, `user_management_sub_bar`, …). + +--- + +## Consommateurs d’imports (à mettre à jour) + +### Screens +- `screens/administrateurs/admin_dashboardScreen.dart` — `UserManagementPanel`, `ParametresPanel` +- `screens/gestionnaire/gestionnaire_dashboard_screen.dart` — `UserManagementPanel` +- `screens/administrateurs/creation/admin_create.dart` — `suppression_confirm_dialog` +- `screens/administrateurs/creation/gestionnaires_create.dart` — idem + +### Widgets déjà en `dashboard/` +- `am_edit_modal`, `child_detail_modal`, `parent_edit_modal`, `select_*` — imports vers `widgets/admin/common/*` ou panels + +### Divers +- `widgets/common/identity_block.dart` (si import admin) +- Tous les fichiers **déplacés** entre eux (imports relatifs / package) + +### Hors scope rename classes +Sauf décision explicite sur le typo `parent_managmant_widget` → pas de rename de **classes** métier dans ce ticket (seulement chemins de fichiers + imports). +`AdminManagementWidget` **conserve** son nom. + +--- + +## Plan d’exécution + +1. Partir de `feature/155-rename-admin-prefix-dashboard` (phase 1) **ou** `develop` si phase 1 déjà mergée +2. `git mv` fichiers selon inventaire +3. Remplacer globalement + `package:p_tits_pas/widgets/admin/` → `package:p_tits_pas/widgets/dashboard/` + **sauf** `…/widgets/admin/admin_management_widget.dart` +4. Corriger imports relatifs cassés +5. Grep de contrôle (ci-dessous) +6. Build Flutter web (Docker) + smoke dashboard admin **et** gestionnaire +7. Merge → squash master si flux habituel + +--- + +## Vérifs + +```bash +# Plus de panels partagés sous admin (seul AdminManagement attendu) +find frontend/lib/widgets/admin -name '*.dart' + +# Plus d’imports panels vers l’ancien chemin (sauf AdminManagement) +rg -n "widgets/admin/(user_management|dossiers_|parent_|enfant_|assistante|gestionnaire|pending|validation_|parametres|relais|am_dossier|parent_dossier|dossier_list|common/)" frontend/lib + +# Screens OK +rg -n "widgets/admin/" frontend/lib/screens +``` + +Attendu screens : **0** hit vers panels ; éventuellement plus aucun hit `widgets/admin/` sauf si import explicite `AdminManagementWidget` depuis `user_management_panel` (chemin `widgets/admin/admin_management_widget.dart`). + +--- + +## Hors scope + +- Refonte UX des modales / panels (ticket dédié annoncé) +- Rename `EnfantAdminModel` +- Rename `screens/administrateurs/` +- Rename `AdminUserFormDialog` / `AdminCreateDialog` +- Changement API / back +- #152 (`est_multiple`) — autre branche + +--- + +## Critères d’acceptation + +- [ ] Inventaire déplacé selon tableau +- [ ] `widgets/admin/` ne contient plus que `admin_management_widget.dart` (variante A) +- [ ] Imports screens + widgets à jour +- [ ] Build Flutter OK +- [ ] Recette : dashboard **administrateur** et **gestionnaire** (listes, ouverture fiches, validation, création dossier) sans régression +- [ ] Aucun changement comportemental volontaire + +--- + +## Risques / notes + +- **Conflits de merge** si d’autres features touchent les panels → faire ce ticket quand la surface dashboard est calme (fin 0.1.0 OK) +- Typo `parent_managmant_widget` : soit inclus (bonus), soit ticket cleanup 1-ligne séparé +- Docs d’archive citant `widgets/admin/…` : pas obligatoire de mettre à jour ; `docs/27_BRIEFING-FRONTEND.md` oui si encore listé