Bug: Reaktion und Reaktion-erhalten laden die nächste Seite nicht

Auf der Seite „reaction/reaction-received“ bei „activity/notification“ gibt es einen Fehler.

Wenn der Benutzer versucht, nach unten zu scrollen und die nächste Seite zu laden, werden dieselben Elemente zur Liste hinzugefügt, was zu Duplizierung führt.

Das Problem liegt in einer Fehlausrichtung zwischen Frontend und Backend. Die im Frontend definierte id ist post_id, während das Backend reaction_id benötigt.

Ein Entwurf einer Pull-Anfrage (PR) ist hier, bitte überprüfen Sie diese, wenn es Ihnen passt.

3 „Gefällt mir“

Danke für den Entwurf der PR, es scheint, dass die Paginierung für Reaktionen jetzt ungenau ist und sich wiederholt.

Ich bin mir nicht sicher, ob die korrekte Lösung darin besteht, die post_id zu setzen. Es sieht so aus, als ob die Paginierung before_reaction_user_id verwendet (siehe hier). Möglicherweise würde sogar das Entfernen von Zeile 27 (der PR) helfen, da sie wahrscheinlich in der abgeflachten reaction oben gesetzt wird.

Vielen Dank für Ihre Antwort.
Ich werde es morgen überprüfen und sehen, ob ich das Problem beheben kann.

1 „Gefällt mir“

Cool, danke!

Um es klarzustellen: Ich denke, die before_reaction_user_id sollte die ID aus discourse_reactions_reaction_users sein – ich finde diesen Variablennamen etwas verwirrend. Bitte zögern Sie nicht, hier oder im Chat etwas zu klären.

1 „Gefällt mir“

Ich habe untersucht und herausgefunden, warum der rspec fehlgeschlagen ist.
Die ursprüngliche Spezifikation prüft eine Komponente mit der Eigenschaft expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\").

Allerdings wurde #{post_1.id} im letzten Commit in reaction_user_id geändert, was zu einer Nichtübereinstimmung führte und den Fehler verursachte.


Der ursprüngliche Gedanke war, id so zu ändern, dass es den API-Anforderungen entspricht. Ich habe jedoch übersehen, dass id auch in PostList als post_id verwendet wird, wie folgt:

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

Und die darin verwendete id wird in der Komponente post.gjs abgebildet:

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

Daher sollte das ursprüngliche id-Verhalten nicht geändert werden, da dies zu schwerwiegenden Nichtübereinstimmungen in der postList führen kann, was direkt zum gestrigen Ausfall des rspec führte.


Als Workaround gibt es möglicherweise einen anderen Weg, dies zu lösen:

Hinzufügen eines neuen Feldes reaction_user_id: reaction.id, wenn flattenForPostList aufgerufen wird, und dann Ändern von return array.length ? array[array.length - 1].id : null; in der Funktion #getLastIdFrom(array) zu return array.length ? array[array.length - 1].reaction_user_id.


Zusammenfassend:
Die reaction_id, post_id und nun die reaction_user_id sind völlig unterschiedlich, aber die id, die in der postList-Komponente benötigt wird, muss post_id sein. Während die id, die zum Abrufen der nächsten Seite benötigt wird, reaction_user_id sein muss, was äußerst verwirrend ist.

@nat

Danke für die Untersuchung und den PR @small-lovely-cat :+1:

Ich habe dem PR eine Spezifikation hinzugefügt und werde ihn zusammenführen.

2 „Gefällt mir“

Dieses Thema wurde nach 19 Stunden automatisch geschlossen. Neue Antworten sind nicht mehr zulässig.