InseeFr / Bowie

Insee Survey design solution
https://inseefr.github.io/Bowie/
MIT License
7 stars 4 forks source link

🟦 Management mode #46

Closed AnneHuSKa closed 1 month ago

AnneHuSKa commented 2 years ago

Business case

Proposer le mode management dans Lunatic âš  Spec : https://hackmd.io/xMcCsmVJRjaeWmtrjfOrbg âš 

Proposition de Jonathan : https://github.com/InseeFr/Lunatic/issues/1003


Le mode management doit permettre de modifier les valeurs entrées dans les formulaire en prenant en compte les différents états des variables.

Cela se traduit au niveau de l'interface par de nouveaux boutons situés à droite des champs qui permettent d'agir sur la valeur et son état.

On veut aussi pouvoir suivre l'historique des changement avec plusieurs valeurs associé à chaque réponse.

Proposition technique

D'après les besoins, Lunatic ne peut pas porter la responsabilité de cette logique car l'état des variables et la priorité dans le choix de la valeur est dépendant de la logique choisit par l'orchestrateur (la notion de "valeur la plus récente" varie en fonction du contexte). Il est d'ailleurs prévu dans Lunatic de retirer cette notion d'état pour qu'il ne reçoive que les valeur associé à chaque question (plutôt qu'un objet d'état qu'il ignore actuellement).

// Lunatic actuel
{
  "NOM": {  
    "COLLECTED": "John", 
    "PREVIOUS": null, // Ignoré par lunatic 
    "FORCED": null,   // Ignoré par lunatic  
    "EDITED": null,   // Ignoré par lunatic  
    "INPUTTED": null, // Ignoré par lunatic
  }
}

// A l'avenir
{
    "NOM": "John"
}

C'est l'orchestrateur qui se chargera de réconcilier les variables à envoyer au hook useLunatic() en correspondance avec ses propre règles. Lunatic conservera lui les variable entrée dans le formulaire mais ne se charge pas de gérer l'état. Côté orchestrateur les variables pourront être sauvegardé avec une historisation.

   {
      "type": "PREVIOUS",
      "value": "John1",
      "timestamp": "2021-01-01T08:05:32:011"
    },
    {
      "type": "COLLECTED",
      "value": "John",
      "timestamp": "2022-01-02T08:05:32:011"
    },
    {
      "type": "EDITED",
      "value": "john doe",
      "timestamp": "2022-01-03T11:47:27:128"
    },
    {
      "type": "FORCED",
      "value": "John Doe",
      "timestamp": "2022-01-03T12:05:32:011"
    },
    {
      "type": "EDITED",
      "value": "Jane Doe",
      "timestamp": "2022-01-04T11:47:27:128"
    }

Comme on le voit ici c'est l'ordre qui détermine la valeur à sélectionner pour l'affichage plutôt que l'état de la variable. Cette logique ne peut être portée que par l'orchestrateur qui a une connaissance de la logique métier (reprise des variable).

Implications côté orchestrateur

Dans le cadre de la solution précédente il y a plusieurs développement à prévoir côté orchestrateur :

Implication côté Lunatic

Côté Lunatic il faudra prévoir un moyen de simplifier l'injection de composants avant et après un champs pour permettre l'intégration des nouveaux contrôles attendu pour la reprise des données.

Il faudra aussi prévoir un moyen de désactiver les filtres pour permettre une navigation dans le formulaire dans son intégralité en cas de besoin (à confirmer).


Mémoire d'issues qui ont concerné le sujet

AnneHuSKa commented 1 month ago

@JulienCarmona : tu saurais comment conserver une trace de cela stp ?