Автор предупреждения не выделен цветом модератора

Привет, народ!

Я расследовал, почему предупреждения в личных сообщениях (PM) теряют цветовое оформление для персонала после миграции потока постов на Glimmer, и хотел поделиться тем, что я нашел — похоже на небольшую оплошность, а не на преднамеренное изменение (по крайней мере, в части кода).

Проблема

В 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, и класс moderator никогда не применяется к первому посту предупреждения в личных сообщениях.

Как это работало раньше

В старой системе виджетов transformPost (transform-post.js) явно отображал флаг уровня темы в атрибуты поста:

postAtts.isWarning = topic.is_warning;

Затем widgets/post.js проверял attrs.isWarning && attrs.firstPost, чтобы применить класс moderator. Этот мост был потерян во время миграции на Glimmer.

Мое мнение

Поскольку post.gjs активно ссылается на @post.isWarning, похоже, что намерение заключалось в сохранении этого поведения. Если удаление цветового оформления персонала из предупреждений было преднамеренным, то ветка (and @post.isWarning @post.firstPost) в post.gjs является мертвым кодом и может быть удалена. Если это баг (что кажется более вероятным, учитывая старый код виджетов), исправление будет небольшим геттером в модели Post:

get isWarning() {
  return this.topic?.is_warning;
}

Я хотел узнать мнение команды — это выглядит как оплошность при миграции на Glimmer или это было сделано намеренно? В любом случае, мертвая ссылка на @post.isWarning в post.gjs, возможно, заслуживает внимания.

Спасибо!

3 лайка