みなさん、こんにちは
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へのデッド参照は対応する価値があるかもしれません。
ありがとうございます!