アクティビティ/通知の reaction/reaction-received ページにバグがあります。
ユーザーが下にスクロールして次のページを読み込もうとすると、同じアイテムがリストに追加され、重複が発生します。
この問題は、フロントエンドとバックエンド間の不一致に起因しています。フロントエンドで定義されている id は post_id ですが、バックエンドでは reaction_id が必要です。
ドラフトのプルリクエスト(PR)はこちらです。都合の良いときにレビューをお願いします。
「いいね!」 3
nat
(Natalie T)
2
ドラフトPRありがとうございます。リアクションのページネーションが不正確になり、繰り返されているように見えます。
正しい修正はpost_idを設定することなのかどうか分かりません。ページネーションはbefore_reaction_user_idを使用しているように見えます(こちらを参照)。上記のフラット化されたreactionで設定されている可能性が高いため、行27(PRの行)を削除することも役立つかもしれません。
ご返信ありがとうございます。
明日確認して、何か修正できるか見てみます。
「いいね!」 1
nat
(Natalie T)
4
了解しました、ありがとうございます!
明確にするために、before_reaction_user_id は discourse_reactions_reaction_users からのIDであるべきだと思います。この変数名はやや紛らわしいです。ここやチャットで何か不明な点があれば、遠慮なくお尋ねください。
「いいね!」 1
調査した結果、rspecが失敗した理由がわかりました。
元のspecは、プロパティ expect(page).to have_css(\".user-stream-item [data-post-id='#{post_1.id}']\") をアサートしています。
しかし、最後のコミットで #{post_1.id} が reaction_user_id に変更されたため、不一致が生じ、失敗の原因となりました。
当初はAPIのニーズに合わせて id を変更することを考えていましたが、id が PostList でも post_id として使用されているという事実に気づきませんでした。以下はその例です。
<PostList
@posts={{@model}}
@fetchMorePosts={{@controller.loadMore}}
@emptyText={{i18n "notifications.empty"}}
@additionalItemClasses="user-stream-item"
@showUserInfo={{false}}
class="user-stream"
>
そして、そこで使用される id は post.gjs コンポーネントでマッピングされています。
data-post-id={{@post.id}}
data-topic-id={{@post.topicId}}
data-user-id={{@post.user_id}}
したがって、元の id の動作は変更すべきではありません。これは、postListで深刻な不一致を引き起こし、昨日のrspecの失敗に直接つながるためです。
回避策として、別の解決方法があるかもしれません。
flattenForPostList の際に新しいフィールド reaction_user_id: reaction.id を追加し、#getLastIdFrom(array) 関数内の return array.length ? array[array.length - 1].id : null; を return array.length ? array[array.length - 1].reaction_user_id に変更します。
要するに。
reaction_id、post_id、そして現在の reaction_user_id は全く異なりますが、postListコンポーネントで必要な id は post_id である必要があります。一方で、次のページを取得するために必要な id は reaction_user_id であり、これは非常に不可解です。
@nat
調査とPRをありがとうございます @small-lovely-cat 
PRに仕様を追加し、マージします。
「いいね!」 2
zogstrip
クローズされました:
8
このトピックは19時間後に自動的にクローズされました。新しい返信は許可されていません。