Bug : reaction et reaction-received ne parviennent pas à charger la page suivante

Dans la page reaction/reaction-received de activity/notification, il existe un bug.

Lorsque l’utilisateur essaie de faire défiler vers le bas et de charger la page suivante, les mêmes éléments sont ajoutés à la liste, provoquant une duplication.
Le problème provient d’un désalignement entre le frontend et le backend. L’id défini dans le frontend est post_id tandis que le backend requiert reaction_id.

Une PR (Pull Request) préliminaire est disponible ici, veuillez l’examiner lorsque cela vous convient.

3 « J'aime »

Merci pour la demande de tirage (PR) préliminaire, il semble en effet que la pagination pour les réactions soit désormais inexacte et semble se répéter.

Je ne suis pas sûr que la correction correcte soit de définir le post_id. Il semble que la pagination utilise before_reaction_user_id (voir ici). Il serait potentiellement même utile de supprimer la ligne 27 (la PR) car elle est probablement définie dans la réaction aplatie (reaction) ci-dessus.

Merci pour votre réponse.
Je vais l’inspecter demain et voir si quelque chose peut arranger cela.

1 « J'aime »

Cool, merci !

Pour être clair, je pense que le before_reaction_user_id devrait être l’identifiant provenant de discourse_reactions_reaction_users - je trouve que ce nom de variable est quelque peu déroutant. N’hésitez pas à clarifier quoi que ce soit ici ou dans le chat.

1 « J'aime »

J’ai enquêté et trouvé pourquoi le rspec a échoué.

Le spec original affirme un composant avec la propriété expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\").

Cependant, le #{post_1.id} a été changé en reaction_user_id dans le dernier commit, ce qui a provoqué une inadéquation, entraînant l’échec.


La pensée initiale était de changer id pour répondre aux besoins de l’API, cependant, j’ai manqué le fait que l’id est également utilisé dans PostList comme post_id, comme suit :

<PostList
    @posts={{@model}}
    @fetchMorePosts={{@controller.loadMore}}
    @emptyText={{i18n "notifications.empty"}}
    @additionalItemClasses="user-stream-item"
    @showUserInfo={{false}}
    class="user-stream"
  >

Et l’id utilisé dedans est mappé dans le composant post.gjs

data-post-id={{@post.id}}
data-topic-id={{@post.topicId}}
data-user-id={{@post.user_id}}

Donc, le comportement original de l’id ne devrait pas être changé, car cela pourrait causer de graves incohérences dans la postList, ce qui mène directement à l’échec du rspec hier.


Comme solution de contournement, il pourrait y avoir une autre façon de résoudre ce problème :

Ajouter un nouveau champ reaction_user_id: reaction.id lors de flattenForPostList, puis modifier la fonction #getLastIdFrom(array) de return array.length ? array[array.length - 1].id : null; à return array.length ? array[array.length - 1].reaction_user_id.


TL;DR;
Le reaction_id, le post_id, et maintenant le reaction_user_id sont totalement différents, mais l’id utilisé dans le composant postList doit être post_id. Alors que l’id nécessaire pour récupérer la page suivante devrait être reaction_user_id, ce qui est extrêmement déroutant.

@nat

Merci pour l’enquête et la PR @small-lovely-cat :+1:

J’ai ajouté une spécification à la PR et je vais la fusionner.

2 « J'aime »

Ce sujet a été automatiquement fermé après 19 heures. Les nouvelles réponses ne sont plus autorisées.