Unified Newは、ユーザーがトピックをスクロールして通過した後に、そのトピックを非表示にできますか?

新しい Unified New ビューをDiscourseサイトのメインフィード(ホームページ)として使用することを検討しています。ただし、X/TwitterやFacebookのように動作させたいと考えています。

私が実現しようとしているのは以下の通りです:

  • トピックがUnified Newフィードに表示される。

  • ユーザーがスクロールし、そのトピックがビューポート内に一度表示される。

  • ユーザーがそれをスクロールで通り過ぎると、Discourseはそのトピックをそのユーザーに対して「既読」または「無視済み」として扱う。

  • ユーザーがページをリロードするか、後日 /new に戻った際、そのトピックはもう表示されない。

理想を言えば、スクロール中にその行が即座に消えるのは避けたいです。そうするとページがジャンプしてしまう可能性があるためです。バックグラウンドで既読/無視済みとしてマークし、次のロード時に消えているだけで十分です。

また、私は Don’s Topic Preview Modal も使用しており、これはすでにビューポート周辺のトピックをプリフェッチしています。そのため、トピックが単にプリフェッチされた状態と、ユーザーが実際に見た状態を区別したいと考えています。

例えば、以下のような仕組みです:

トピックが少なくとも50%表示されて200〜400ms経過 → 既読としてマーク → ユーザーがそれをスクロールで通り過ぎる → Unified Newから無視済みとして除外。

誰か類似の機能を実装したことはありますか?

現在のユーザーに対して、Unified Newから個別のトピックを無視(除外)するための既存のDiscourse APIやフロントエンドのメソッドはありますか?それとも、これはプラグインやテーマコンポーネントが必要になるのでしょうか?

基本的に、ユーザーがすべてのトピックを開くことを要求するのではなく、Unified Newを「まだ見ていないもの」のパーソナライズされたスクロールフィードにしたいと考えています。

「いいね!」 4

これは現在存在する機能ではないと思うので、Contribute > Feature に移動します。

バッチ操作は存在しますが、スクロールしながら「チェックするだけ」というのは、あまりスムーズではないように感じます。

「いいね!」 1

トピックモーダルがすでにプリフェッチを使用しているため、プリフェッチが発生した時点で閉じるコンポーネントを作成できるか確認してみます。

ログイン済みユーザーのみ /new をホームページとして表示する方法はありますか?ログインしていないユーザーは当然404エラーになります。

これなら役に立ちますか?

ここでは “latest” を “new” に変更できます。試してみましたが、動作すると思います。

また、Custom Homepage for Groups もあります。これは、すべてのユーザーが自動的に追加される trust_level_0 グループを使用すれば動作するはずです。

「いいね!」 2

つまり、もっと簡単な方法があることはわかっていた……あとはそれを見つけるだけだった。

「いいね!」 1

このトピックは閉鎖または削除できます。/new の動作を完全に理解していなかったため、過去 x 時間分の投稿が表示されるものと誤解していました。実際にはそうではなく、この状態では新規ユーザーに空のページが表示されてしまいます。

「いいね!」 1