バグ: リアクションとリアクション受信で次のページが読み込まれない

アクティビティ/通知の reaction/reaction-received ページにバグがあります。

ユーザーが下にスクロールして次のページを読み込もうとすると、同じアイテムがリストに追加され、重複が発生します。

この問題は、フロントエンドとバックエンド間の不一致に起因しています。フロントエンドで定義されている idpost_id ですが、バックエンドでは reaction_id が必要です。

ドラフトのプルリクエスト(PR)はこちらです。都合の良いときにレビューをお願いします。

「いいね!」 3

ドラフトPRありがとうございます。リアクションのページネーションが不正確になり、繰り返されているように見えます。

正しい修正はpost_idを設定することなのかどうか分かりません。ページネーションはbefore_reaction_user_idを使用しているように見えます(こちらを参照)。上記のフラット化されたreactionで設定されている可能性が高いため、行27(PRの行)を削除することも役立つかもしれません。

ご返信ありがとうございます。
明日確認して、何か修正できるか見てみます。

「いいね!」 1

了解しました、ありがとうございます!

明確にするために、before_reaction_user_iddiscourse_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 を変更することを考えていましたが、idPostList でも post_id として使用されているという事実に気づきませんでした。以下はその例です。

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

そして、そこで使用される idpost.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_idpost_id、そして現在の reaction_user_id は全く異なりますが、postListコンポーネントで必要な idpost_id である必要があります。一方で、次のページを取得するために必要な idreaction_user_id であり、これは非常に不可解です。

@nat

調査とPRをありがとうございます @small-lovely-cat :+1:

PRに仕様を追加し、マージします。

「いいね!」 2

このトピックは19時間後に自動的にクローズされました。新しい返信は許可されていません。