@@ -496,7 +496,10 @@ export default {
496496 );
497497 // ########## Cette area est déja selectionnée, on cherche donc à la retirer #################
498498 if (index > - 1 ) {
499- this .unselect_area (feature .properties ); // Retire la zone de la déclaration
499+ // On utilise l'entrée déjà enregistrée dans areas_localisation (qui contient id_parent)
500+ // plutôt que feature.properties (issu du geojson brut, sans id_parent) pour que la
501+ // cascade de nettoyage des parents (commune, section, forêt) fonctionne correctement.
502+ this .unselect_area (this .declaration_data .areas_localisation [index]); // Retire la zone de la déclaration
500503 } else {
501504 // ######### Cette area n'est pas déja selectionnée, on cherche donc à l'ajouter #############
502505 this .select_area (feature .properties );
@@ -701,25 +704,34 @@ export default {
701704 if (
702705 ! this .declaration_data .areas_localisation .some ((area ) => area .id_parent === this_parent)
703706 ) {
707+ // Récupère l'id de la commune parente de la section avant de retirer la section
708+ const section_entry = this .declaration_data .areas_localisation .find (
709+ (area ) => area .id_area === this_parent
710+ );
711+ const id_commune_parente = section_entry ? section_entry .id_parent : null ;
712+
704713 this .declaration_data .areas_foret_sections =
705714 this .declaration_data .areas_foret_sections .filter ((id ) => id !== this_parent);
706715
707716 this .declaration_data .areas_localisation =
708717 this .declaration_data .areas_localisation .filter ((area ) => area .id_area !== this_parent);
709- // si l'actual_commune n'est dans aucun id_parent des elements de areas_localisation, on le retire
710- // Supprime de areas_localisation tous les éléments dont id_parent n'existe pas dans areas_foret_communes
711- this .declaration_data .areas_localisation =
712- this .declaration_data .areas_localisation .filter ((area ) => {
713- return (
714- area .id_parent == null ||
715- this .declaration_data .areas_foret_communes .includes (area .id_parent )
718+
719+ // si la commune n'est dans aucun id_parent des elements restants de areas_localisation, on la retire
720+ if (
721+ id_commune_parente !== null &&
722+ ! this .declaration_data .areas_localisation .some (
723+ (area ) => area .id_parent === id_commune_parente
724+ )
725+ ) {
726+ this .declaration_data .areas_localisation =
727+ this .declaration_data .areas_localisation .filter (
728+ (area ) => area .id_area !== id_commune_parente
716729 );
717- });
718- // Met à jour areas_foret_communes pour ne garder que celles qui sont encore référencées comme parent
719- this .declaration_data .areas_foret_communes =
720- this .declaration_data .areas_foret_communes .filter ((commune ) =>
721- this .declaration_data .areas_localisation .some ((area ) => area .id_parent === commune)
722- );
730+ this .declaration_data .areas_foret_communes =
731+ this .declaration_data .areas_foret_communes .filter (
732+ (id ) => id !== id_commune_parente
733+ );
734+ }
723735 }
724736 } else if (this .declaration_data .b_document == true ) {
725737 // ################## CAS DES FORET DGD ##############################
0 commit comments