Equipements: filtrer les commandes

Salut

Afin d’améliorer l’ergonomie serait-il possible de rajouter des filtres en haut de la vue des équipements afin de pouvoir faire des recherches sur les commandes?

Je voudrais implémenter des filtres sur les commandes des équipements de mon plugin eufy qui en compte parfois + de 50. Ca arrive aussi sur d’autres plugins comme virtuel, xiaomihome ou webostv
Je trouve que ca serait une chouette évolution pour le core, pas vous?

J’ai fait un test sur mon plugin en m’inspirant de gsh en ajoutant le code suivant:

           <div role="tabpanel" class="tab-pane" id="commandtab">
                <div class="table-responsive">
                    <table id="table_cmd" class="table table-bordered table-condensed tablesorter">
                        <thead>
                            <tr>
                                <th>{{Id}}</th>
                                <th>{{Nom}}</th>
                                <th data-sorter="select-text">{{Type}}</th>
                                <th data-sorter="false" data-filter="false">{{Paramètres}}</th>
                                <th data-sorter="false" data-filter="false">{{Options}}</th>
                                <th data-sorter="false" data-filter="false">{{Actions}}</th>
                            </tr>
                        </thead>
                        <tbody>
                        </tbody>
                    </table>
                </div>
            </div>

ce qui donne:

Malheureusement le refresh ne se fait pas donc je suppose qu’il faudrait écrire une méthode qui traite l’événement javascript (c’est pas trop mon fort)
Sinon serait-il possible de surcharger une méthode du core?

Merci pour vos suggestions et avis!

Up! Personne ?

Salut,

Up après 1 journée c’est bof bof je trouve… :neutral_face: Up tout court d’ailleurs…

Comme tu peux le constater le code pour afficher les commandes est écrit par toi même dans le code de ton plugin, le core ne peut pas y faire grand chose du coup.

Mais encore ??

Salut,

Moi je n’avais pas vu le post car posté dans une catégorie non-adapté (selon moi) (c’est pas en rapport avec l’utilisation du core) donc ca n’aide pas à avoir des réponses
mais vu qu’il a été déplacé, je le remarque immédiatement (ou presque :stuck_out_tongue:)


sinon pareil que @Salvialf, tu peux faire un filtre, c’est ton code; c’est quoi le soucis?

perso, c’est pas l’idéal sur les très gros volume probablement, et je ne sais pas si ca pose problème sans jquery, mais j’utilise souvent simplement un tablesorter (class à rajouter sur ta table) puis faut juste l’init et généralement simplement appeler jeedomUtils.initTableSorter() fait l’affaire.
Rien d’autres à faire ni à écrire donc ca devrait pas être trop compliqué :wink:

Auriez-vous un exemple de code?
Merci

je viens de le donner, montres ce que tu fais avec ca

Bonsoir,

Je suis pas sur que ce soit une bonne idée d’utiliser tablesorter sur la table_cmd, j’avais déja testé, et il me semble qu’il y a un soucis lors d’un refresh sur la liste des Eqlogic et lorsqu’on sélectionne
image
et qu’en suite on resélectionne un eqlogic.

de mémoire même avec un destroy de tablesorter, il y a quand même cette erreur qui persiste.

Au pire il faudrait récupérer l’evenement du bouton pour lancer un loadPage.

Oui je confirme jai eu les meme soucis…

Apres qlq tests, Pas eu envie de creuser plus dans le detail, j ai fait du custom finalement plus simple!

J’ai retester par acquit de conscience :rofl: :

  • Il faut bien passer par un loadPage() pour ne pas générer d’erreurs lorsqu’on navigue entre plusieurs EqLogic, il y a sans doute quelque chose dans la fonction qui reset les listener ou autre…

Voici ce que j’ai ajouté dans le js :

$('.eqLogicAction[data-action=returnToThumbnailDisplay]').removeAttr('href').off('click').on('click', function(event) {
  // contournement du plugin.template du core
  // force un load page lors du click sur returnToThumbnailDisplay
  event.preventDefault()
  jeedomUtils.loadPage('index.php?v=d&m=monPlugin&p=monPlugin', true)
})

function printEqLogic(_eqLogic) {
  // lance une tempo pour laisser le temps au core d'executer tous les addCmdToTable
  setTimeout(() => {
    $('table.tablesorter').trigger('update') // update de tablesorter
  }, "1000");
}

Merci pour vos retours
Voici le code .php et le .js de mon plugin
eufy.php.txt (11,0 Ko)
eufy.js.txt (5,7 Ko)

@Phpvarious j’ai testé ton code ca ne fonctionne pas sauf si j’ai fait une erreur quelque part?
@Salvialf quelle fonction init js me suggères tu?

Qu’est-ce qui fonctionne pas ?

Edit : je pense avoir saisi en 4.3 le js du plugin passe après le plugin.template et du coup il supprime ton event, teste en mettant un timeout sur ton écouteur d’évènement et passe _noPushHistory a false dans la fonction loadpage :

setTimeout(() => {
$('.eqLogicAction[data-action=returnToThumbnailDisplay]').removeAttr('href').off('click').on('click', function(event) {
  // contournement du plugin.template du core
  // force un load page lors du click sur returnToThumbnailDisplay
  event.preventDefault()
  jeedomUtils.loadPage('index.php?v=d&m=eufy&p=eufy', false)
})
  }, "500");

Je viens d’essayer, pas plus mais je suis pas sur qu’on se soit compris: j’essaie pas d’utiliser le bouton back mais a filtrer la table des commandes sur entrée d’une string.

J’ai passé un moment dessus ya rien qui marche…j’arrive deja pas a choper le listener.
Pourtant si j’extrapole le code pour filtrer les eqLogic dans ./core/js/plugin.template.js ca devrait marcher non?

 // test
122 $("#table_cmd").off('keyup').keyup(function() {
123   alert ("coucou")
124 })

Je n’ai trouvé aucun plugin qui filtre les commandes a croire que je suis le seul a vouloir le faire?

J’ai bien compris :wink:, mais c’est juste pour expliquer qu’il y a un soucis lors d’utilisation de ce bouton + tablesorter

Bah écoute j’ai appliqué tes 2 fichiers joints sur un plugin de test, et j’arrive bien a filtrer (en 4.3.21)…

Bon rien à a faire j’y arrive pas!
Ma fonction keyup() plus haut est bien appelée mais zéro filtrage.
Tu pourrais me partager ton code de test?

Pourquoi utiliser keyup() ?

Désolé j’ai du monde, mais dès que je peut je t’envoi les 2 fichiers modifié

oui bien sur pas d’urgence
merci beaucoup et bonne soirée :wink:

Voici les modif que j’ai fait sur les fichiers que tu as joint:

- Dans le JS

Supprimer tout le code après la ligne 118. Puis ajouter ceci :
setTimeout(() => {
  $('.eqLogicAction[data-action=returnToThumbnailDisplay]').removeAttr('href').off('click').on('click', function(event) {
    // contournement du plugin.template du core
    // force un load page lors du click sur returnToThumbnailDisplay
    event.preventDefault()
    jeedomUtils.loadPage('index.php?v=d&m=virtual&p=virtual', false)
  })
}, "500");

function printEqLogic(_eqLogic) {
  // lance une tempo pour laisser le temps au core d'executer tous les addCmdToTable
  setTimeout(() => {
    $('table.tablesorter').trigger('update') // update de tablesorter
  }, "1000");
}

- Dans le php

                    <table id="table_cmd" class="table table-bordered table-condensed tablesorter">
                        <thead>
                            <tr>
                                <th>{{Id}}</th>
                                <th data-sortable="true" data-sorter="inputs">{{Nom}}</th><! -- ajout cible pour filtrer sur les inputs -->
                                <th data-sorter="select-text">{{Type}}</th>
                                <!-- <th data-sorter="false" data-filter="false">{{Paramètres}}</th> /!\ les paramètres (minValue, maxValue et unite) sont dans Options dans le addCmdToTable -->
                                <th data-sorter="false" data-filter="false">{{Options}}</th>
                                <th data-sorter="false" data-filter="false">{{Actions}}</th>
                            </tr>
                        </thead>
                        <tbody>
                        </tbody>
                    </table>
1 « J'aime »

Ca marche! un grand merci @Phpvarious !
En fait le problème était dans la syntaxe du data-sorter du php

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