PnX-SI / gn_module_monitoring

Module GeoNature de suivi générique pour protocoles de suivi simples
GNU Affero General Public License v3.0
5 stars 23 forks source link

Définition de sous-module : problème avec la valeur par défaut du cd_nom #372

Open ahurabielle opened 4 days ago

ahurabielle commented 4 days ago

Bonjour,

Dans les sous-modules POP développé pour la SHF, on demande à l'utilisateur s'il a observé des amphibiens (champ presence). S'il indique Oui, l'utilisateur cherchera son taxon. S'il indique Non, on veut que le cd_nom soit mis à 914450 (cela correspond aux amphibiens) par défaut, automatiquement.

La configuration du fichier observation.json est la suivante :

  "specific": {
    "presence": {
       "type_widget": "radio",
       "required": true,
       "attribut_label": "Avez-vous observé des amphibiens lors de la prospection",
       "values": ["Oui", "Non"],
       "value": "Oui"
    },
    "cd_nom": {
      "type_widget": "taxonomy",
      "attribut_label": "Espèce observée",
      "keyValue": "cd_nom",
      "keyLabel": "__MODULE.TAXONOMY_DISPLAY_FIELD_NAME",
      "multiple": false,
      "api": "taxref/allnamebylist/__MODULE.ID_LIST_TAXONOMY",
      "application": "TaxHub",
      "required": "({value}) => value.presence === 'Oui'",
      "type_util": "taxonomy",
      "value": 914450,
      "id_list": "__MODULE.ID_LIST_TAXONOMY",
      "hidden":"({value}) => value.presence === 'Non'"
    } ,

Le comportement fonctionne bien la plupart du temps : lorsque l'utilisateur choisit de saisir une observation, il arrive sur une interface, et par défaut, l'espèce est mise à "Amphibia". image

Mais parfois (lors de la "première" saisie d'observation sur le module, ou après un refresh (CTRL+MAJ+R), le champ cd_nom ne s'initialise pas correctement. On a alors une erreur dans la console et le champ "Espèce observée" n'est pas pré-rempli : ERROR TypeError: Qt[this.displayedLabel] is undefined image

Le problème n'est malheureusement pas uniquement visuel. Si cette erreur se produit, quelque soit ce que saisit l'observateur dans le formulaire au niveau de l'espèce, la valeur ne sera pas repercutée dans la variable cd_nom. Dans l'exemple ci-dessous, j'ai saisi "bufo bufo", j'ai validé... mais dans ma saisie, je récupère quand même la valeur "Amphibia". image image

En imprimant la valeur du cd_nom (grâce à la fonction change) avec le code suivant :

"change": [
  "({objForm, meta}) => {",
    "console.log(objForm.value.cd_nom)",
  "}",
  ""
  ]

je constate que la valeur, dans le cas d'erreur, est bien mise à 914450 puis à l'objet taxonomique correspondant à 914450 image Par la suite, même quand je modifie le formulaire, l'objet reste identique ! image

Je ne comprends pas le problème.

J'avais envisagé également de ne pas passer par le champ value et de fonctionner uniquement avec la fonction "change" comme dans l'issue #93 pour mettre la valeur par défaut. Mais là aussi, j'ai un souci : dès lors que je manipule la variable cd_nom, j'ai la même erreur : ERROR TypeError: Qt[this.displayedLabel] is undefined, le cd_nom = 914450, puis les saisies de l'utilisateur ne fonctionnent plus.

Comment puis-je résoudre ce souci embarrassant ?

amandine-sahl commented 2 days ago

Effectivement, on ne peut pas passer de valeur par défaut au composant taxonomy. Pour contourner le soucis je supprimerais la clé value du champ cd_nom et mettrait le code suivant dans on change:

"change": [
    "({objForm, meta}) => {",
    "if ((objForm.value.cd_nom == undefined) || (objForm.value.presence == 'Non')) {",
    "objForm.patchValue({cd_nom : {'cd_nom': 914450, 'lb_nom': 'Amphibia', 'nom_valide': 'Amphibia', 'nom_vern': 'Amphibiens, batraciens'}})",
    "}",
    "}",
    ""
  ]