優先度/重大度: 通常
プラットフォーム: デスクトップとモバイルの両方で
説明: モデレーターがユーザーに警告を送信した際、少なくとも1年前のDIscourseバージョンでは、警告のOPは背景がスタッフカラーでハイライトされるはずでした。しかし、Discourse v3.5.0.beta9を使用すると、OPは通常の背景になります。
再現手順: Discourse v3.5.0.beta9でユーザーに警告を送信する。
優先度/重大度: 通常
プラットフォーム: デスクトップとモバイルの両方で
説明: モデレーターがユーザーに警告を送信した際、少なくとも1年前のDIscourseバージョンでは、警告のOPは背景がスタッフカラーでハイライトされるはずでした。しかし、Discourse v3.5.0.beta9を使用すると、OPは通常の背景になります。
再現手順: Discourse v3.5.0.beta9でユーザーに警告を送信する。
同じ問題です。バグなのか意図されたものなのか疑問です。
みなさん、こんにちは
Glimmer投稿ストリームの移行後、警告PMの最初の投稿がスタッフ色のスタイリングを失う理由を調査していたところ、いくつかの発見がありました。これは意図的な変更ではなく、小さな見落としのようです(少なくともコード側では)。
問題点
post.gjs(436行目)では、モデレーターCSSクラスは以下に基づいて適用されます:
(if
(or @post.isModeratorAction (and @post.isWarning @post.firstPost))
"post--moderator moderator"
"post--regular regular"
)
@post.isModeratorActionは正しく動作しており、Postモデル上の適切なゲッターです。しかし、@post.isWarningはPostモデル上には存在しません。
isWarningプロパティ、ゲッター、または追跡フィールドが定義されていないため、条件(and @post.isWarning @post.firstPost)は常にfalseを返します。その結果、警告PMの最初の投稿にはmoderatorクラスが適用されません。
以前の動作
古いウィジェットシステムでは、transformPost(transform-post.js)がトピックレベルのフラグを投稿属性に明示的にマッピングしていました:
postAtts.isWarning = topic.is_warning;
その後、widgets/post.jsがattrs.isWarning && attrs.firstPostをチェックしてmoderatorクラスを適用していました。この橋渡しはGlimmer移行中に失われました。
私の考察
post.gjsが@post.isWarningを参照していることから、この動作を維持する意図があったように見えます。警告からスタッフ色を削除することが意図的であれば、post.gjsの(and @post.isWarning @post.firstPost)ブランチはデッドコードとなり、クリーンアップできます。もしこれがバグであるなら(旧ウィジェットコードから判断すると、その可能性が高い)、Postモデルに小さなゲッターを追加することで修正できます:
get isWarning() {
return this.topic?.is_warning;
}
チームの意見を確認したく、これがGlimmer移行の見落としなのか、それとも意図的に省略されたものなのかを尋ねています。いずれにせよ、post.gjs内の@post.isWarningへのデッド参照は対応する価値があるかもしれません。
ありがとうございます!
コードの書き方が興味深いですね。チームの誰かが、その部分に oversight(見落とし)があったのか、それとも他の理由でそのように書かれたのかについて、あなたの質問に返信してくれることを期待しています。
素晴らしいレポート、ありがとうございます。まさにあなたが説明した通りです。ここで修正を適用しています: