Привет, народ!
Я расследовал, почему предупреждения в личных сообщениях (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, возможно, заслуживает внимания.
Спасибо!