Revert "fix(#131): activer Sauvegarder sur statut, enfants et champs AM."

This reverts commit d03a8e6c8b4363e9443e4a64711a7c68a21c5700.
This commit is contained in:
MARTIN Julien 2026-07-07 23:12:09 +02:00
parent d03a8e6c8b
commit c865d11dc3
2 changed files with 18 additions and 100 deletions

View File

@ -1,4 +1,3 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:p_tits_pas/models/assistante_maternelle_model.dart';
@ -58,25 +57,6 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
bool _saving = false;
bool _dirty = false;
late String _baseStatut;
late bool _baseDisponible;
late int? _basePlacesAvailable;
late List<String> _baseChildIds;
late String _baseNom;
late String _basePrenom;
late String _baseEmail;
late String _baseTelephone;
late String _baseAdresse;
late String _baseVille;
late String _baseCodePostal;
late String _baseAgrement;
late String _baseNir;
late String? _baseDateNaissanceIso;
late String _baseLieuNaissanceVille;
late String _baseLieuNaissancePays;
late String? _baseAgreementDateIso;
late int? _baseCapacite;
static const double _modalWidth = 930;
static const double _photoProGap = 24;
static const double _proColumnMinWidth = 260;
@ -167,77 +147,16 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
_nomCtrl.addListener(_onNameFieldChanged);
_prenomCtrl.addListener(_onNameFieldChanged);
_tabCtrl.addListener(_onTabChanged);
_captureBaseline();
_reloadChildren();
}
void _captureBaseline() {
_baseStatut = _statut;
_baseDisponible = _disponible;
_basePlacesAvailable = _placesAvailable;
_baseChildIds = _children.map((c) => c.id).toList()..sort();
_baseNom = _nomCtrl.text.trim();
_basePrenom = _prenomCtrl.text.trim();
_baseEmail = _emailCtrl.text.trim();
_baseTelephone = normalizePhone(_telCtrl.text);
_baseAdresse = _adresseCtrl.text.trim();
_baseVille = _villeCtrl.text.trim();
_baseCodePostal = _cpCtrl.text.trim();
_baseAgrement = _agrementCtrl.text.trim();
_baseNir = nirToRaw(_nirCtrl.text);
_baseDateNaissanceIso = _frDateToIso(_dateNaissanceCtrl.text);
_baseLieuNaissanceVille = _lieuNaissanceVilleCtrl.text.trim();
_baseLieuNaissancePays = _lieuNaissancePaysCtrl.text.trim();
_baseAgreementDateIso = _frDateToIso(_dateAgrementCtrl.text);
_baseCapacite = _capaciteMax();
}
bool _hasUnsavedChanges() {
if (_statut != _baseStatut) return true;
if (_disponible != _baseDisponible) return true;
if (_placesAvailable != _basePlacesAvailable) return true;
final childIds = _children.map((c) => c.id).toList()..sort();
if (!listEquals(childIds, _baseChildIds)) return true;
if (_nomCtrl.text.trim() != _baseNom) return true;
if (_prenomCtrl.text.trim() != _basePrenom) return true;
if (_emailCtrl.text.trim() != _baseEmail) return true;
if (normalizePhone(_telCtrl.text) != _baseTelephone) return true;
if (_adresseCtrl.text.trim() != _baseAdresse) return true;
if (_villeCtrl.text.trim() != _baseVille) return true;
if (_cpCtrl.text.trim() != _baseCodePostal) return true;
if (_agrementCtrl.text.trim() != _baseAgrement) return true;
if (nirToRaw(_nirCtrl.text) != _baseNir) return true;
if (_frDateToIso(_dateNaissanceCtrl.text) != _baseDateNaissanceIso) {
return true;
}
if (_lieuNaissanceVilleCtrl.text.trim() != _baseLieuNaissanceVille) {
return true;
}
if (_lieuNaissancePaysCtrl.text.trim() != _baseLieuNaissancePays) {
return true;
}
if (_frDateToIso(_dateAgrementCtrl.text) != _baseAgreementDateIso) {
return true;
}
if (_capaciteMax() != _baseCapacite) return true;
return false;
}
void _syncDirtyState() {
final next = _hasUnsavedChanges();
if (next != _dirty) setState(() => _dirty = next);
}
void _onTabChanged() {
if (!_tabCtrl.indexIsChanging) setState(() {});
}
void _onNameFieldChanged() => setState(() {});
void _onCapacityChanged() {
setState(() {});
_syncDirtyState();
}
void _onCapacityChanged() => setState(() {});
@override
void dispose() {
@ -263,7 +182,9 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
super.dispose();
}
void _markDirty() => _syncDirtyState();
void _markDirty() {
if (!_dirty) setState(() => _dirty = true);
}
String _headerTitle() {
final fn = _prenomCtrl.text.trim();
@ -319,8 +240,10 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
void _applyPlacesCorrection() {
final expected = _computedPlacesAvailable();
if (expected == null) return;
setState(() => _placesAvailable = expected);
_syncDirtyState();
setState(() {
_placesAvailable = expected;
_dirty = true;
});
}
String? _placesInconsistencyMessage() {
@ -395,7 +318,6 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
_dirty = false;
_saving = false;
});
_captureBaseline();
widget.onSaved?.call();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Fiche assistante maternelle enregistrée')),
@ -424,7 +346,6 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
if (!mounted) return;
setState(() => _children = kids);
_syncDirtyState();
} catch (_) {}
}
@ -653,10 +574,10 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
style: TextStyle(fontSize: 13),
),
value: _disponible,
onChanged: (v) {
setState(() => _disponible = v);
_syncDirtyState();
},
onChanged: (v) => setState(() {
_disponible = v;
_dirty = true;
}),
),
],
),
@ -835,10 +756,10 @@ class _AdminAmEditModalState extends State<AdminAmEditModal>
width: 160,
child: AdminStatusCapsule(
statut: _statut,
onChanged: (v) {
setState(() => _statut = v);
_syncDirtyState();
},
onChanged: (v) => setState(() {
_statut = v;
_dirty = true;
}),
),
),
IconButton(

View File

@ -30,10 +30,7 @@ class AdminStatusCapsule extends StatelessWidget {
@override
Widget build(BuildContext context) {
final value = statut;
final items = statuts.contains(statut)
? statuts
: <String>[statut, ...statuts];
final value = statuts.contains(statut) ? statut : statuts.first;
return Container(
height: 34,
decoration: BoxDecoration(
@ -49,7 +46,7 @@ class AdminStatusCapsule extends StatelessWidget {
isDense: true,
style: const TextStyle(fontSize: 13, color: Colors.black87),
icon: const Icon(Icons.arrow_drop_down, size: 20),
items: items
items: statuts
.map(
(s) => DropdownMenuItem(
value: s,