Système de "like"

C’est bon j’ai trouvé une solution avec les règles suivantes sur la colonne vote :

La colonne est éditable si :

  • L’user a déjà voté ( user.Email in rec.Users) et il veut enlever son vote (newRec.Vote == (rec.Vote - 1))

Formule :
user.Email in rec.Users and newRec.Vote == (rec.Vote - 1)

  • L’user n’a jamais voté (ou a retiré son vote) et il veut ajouter un vote :
    user.Email not in rec.Users and newRec.Vote == (rec.Vote + 1)

Et avec la formule suivante pour la colonne « Users » (qui est la liste des users ayant un vote sur la ligne) - même formule que précédemment sauf que s’il retire son vote, on le retire de la liste des users pour lui permettre de revoter.

history = PEEK($Users)
new_mail = $User

// Enlève l'user de la liste s'il enlève son vote
if new_mail and new_mail in history:
  history = ";".join(
    e.strip() for e in history.split(";")
    if e.strip() != new_mail)
  return history  
  
// Ajoute l'user dans la liste s'il ajoute son vote
if history and new_mail:
  return history + ";" + new_mail
else:
  return new_mail

C’était :hot_face:

Démo :
2025-07-03 10.57.38

Lien : Ex - système de vote unique - Grist

3 « J'aime »