Ajout d'un filtre pour la sélection d'un scénario dans un scénario

Bonjour,

Je vous propose une amélioration ergonomique pour la sélection d’un scénario lors de l’ajout de l’appel à un scénario depuis un scénario.

Comme beaucoup, ma liste de scénarios commence à être très longue et c’est un peu pénible de faire la recherche du scénario souhaité en parcourant l’énorme liste déroulante sans pouvoir filtrer.

:warning: ça implique de modifier un fichier du Core de Jeedom, je vous laisse donc assumer :yum:
Pour limiter le risque, la modification ne consistera à ajouter qu’une seule ligne (2 lignes en 4.3) : appel d’une fonction ajoutée dans la personnalisation avancée.

La modification sera donc à refaire à chaque mise à jour de Jeedom.
Idéalement, il faudrait l’introduire en évolution dans le core de Jeedom (avec une amélioration de l’ergonomie car je n’y ai pas touché…)

Modifications à effectuer :
:arrow_right: Etape 1 : ajouter la fonction suivante dans la personnalisation avancée JS de Jeedom

Fonction 'addScenariosFilter' en 'Personnalisation avancée' de Jeedom
function addScenariosFilter(selectElm) {
  const searchInput = document.createElement('input');
  searchInput.classList.add('form-control', 'rounded-left');
  searchInput.placeholder = `Filtre de scénarios`;
  selectElm.parentElement.insertBefore(searchInput, selectElm.nextSibling);

  searchInput.addEventListener("keyup", function (e) {
    const text = e.target.value;
    const options = Array.from(selectElm.options);
    options.forEach (function(option) {
      const optionText = option.text; 
      const lowerOptionText = optionText.toLowerCase();
      const lowerText = text.toLowerCase(); 
      const regex = new RegExp("^" + text, "i");
      const match = optionText.match(regex); 
      const contains = lowerOptionText.indexOf(lowerText) != -1;
      option.hidden = match || contains ? false: true ;
    })
  });
}

:arrow_right: Etape 2 (Jeedom 4.4) : ajouter l’appel de la fonction addScenariosFilter dans le core de Jeedom

Ajouter la ligne addScenariosFilter(select); dans le fichier html/core/template/scenario/scenario.default.html du core de Jeedom depuis l’éditeur de fichiers Jeedom comme ici :

Appel de la fonction 'addScenariosFilter' dans le core de Jeedom
    success: function (scenarios) {
      const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]')
      for (let i in scenarios) {
        const newOption = document.createElement('option')
        newOption.text = scenarios[i].humanName
        newOption.value = scenarios[i].id
        select.appendChild(newOption)
      }

      // Ligne à ajouter
      addScenariosFilter(select);
      // Fin d'ajout

      if ('#scenario_id#' != '' && document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]

:arrow_right: Etape 2 (Jeedom 4.3) : ajouter l’appel de la fonction addScenariosFilter dans le core de Jeedom

Ajouter les lignes :
const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]'); addFilter(select); dans le fichier html/core/template/scenario/scenario.default.html du core de Jeedom depuis l’éditeur de fichiers Jeedom comme ici :

Appel de la fonction 'addScenariosFilter' dans le core de Jeedom
    success: function (scenarios) {
      let options = '';
      options += '<option value="-1">{{Aucun}}</option>';
      for (let i in scenarios) {
        options += '<option value="' + scenarios[i].id + '">' + scenarios[i].humanName + '</option>';
      }
      $('.expressionAttr[data-uid=#uid#][data-l1key=options][data-l2key=scenario_id]').append(options);

      // 2 lignes à ajouter
      const select = document.querySelector('.expressionAttr[data-uid="#uid#"][data-l1key="options"][data-l2key="scenario_id"]');
      addFilter(select);
      // Fin d'ajout
      
      if ('#scenario_id#' != '' && $('.expressionAttr[data-uid=#uid#][data-l1key=options][data-l2key=scenario_id] ```

On obtient alors le résultat suivant :

9 « J'aime »

Bonjour noodom,

Super idée, pourquoi ne proposes-tu pas un PR sur le core ?

Bad

Hello,

J’ai prévu de le faire mais je comptais voir un peu plus loin pour réfléchir à un meilleur rendu :slightly_smiling_face:

3 « J'aime »

Bonjour,

Beau boulot, hesites pas a faire un PR, j’ai bonne espoir de bientot commencer la version 4.5 du core donc on va accepter les PR d’évolution comme celui la.

2 « J'aime »

Bonjour,

C’est franchement une très bonne idée :clap:
GO !..

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.