Skip to content

Draft: Tri manuel des rangées

Nicolas Bouilleaud requested to merge ordering into main

POC expérimental. “Enregistrement_de_l_écran_2023-07-28_à_09.31.31

Ça “fonctionne”, il y a plein de choses à voir.

refs:

On veut aussi réordonner les Maps dans l’index et les UserRoles et MapTokens dans le partage.

L’écosystème rails actuellement c’est deux gems:

  • acts_as_list, vénérable mais fiable
  • ranked-model, un peu plus moderne et soit-disant performant, un peu plus riche aussi.

Le truc rigolo c’est qu’avec le temps elles se sont retrouvées à être maintenues par la même personne. Les deux fonctionnent en ajoutant une colonne supplémentaire dans la table du modèle. Si on veut faire un tri custom par utilisateur, il nous faudra alors une notion de vue. C’est au moins le cas pour les Maps dans l’index, peut-être aussi pour les colonnes; on peut commencer sans.

Dans les choses évidentes:

  • Les rows ne sont pas draggable intégralement, mais depuis une poignée sur la gauche. Le design de @thibautsailly propose une poignée pour les layers, on peut peut-être faire quelque chose du même style
  • Côté implémentation, je hijack totalement le formulaire “geojson” pour ça. On a déjà décidé de le bazarder (pour #289 (closed)), ça sera raisonnable.
  • Dans le code actuel, je chope l’index de l’élément <tr> dans le tbody pour connaître son nouveau row_order_position. Ça ne marchera pas si on n’affiche qu’une vue partielle de la table; il faudrait sans doute plutôt indiquer le nouveau voisin précédent.
  • Qu’est-ce que qu’on fait comme situation initiale? Est-ce qu’à la migration, on donner un row_order à tout les objets?
  • Pour l’instant, on broadcast une suppression puis un ajout (broadcast_remove puis broadcast_after); je ne crois pas qu’il existe de “broadcast_move”, et de toute façon en html il faut supprimer puis ajouter l’élément. Par contre, il faut broadcast les deux dans le même message pour éviter le flicker, et on peut animer ça.
  • A propos, ça serait bien d’avoir du feedback pendant le drag (avant le drop)
  • Peut-être qu’on devrait utiliser une librairie pour la gestion des interactions dans les tables

Merge request reports