Голосование в постах имеет включенные лайки, но они не отображаются

У нас включена настройка qa enable likes on answers, но сердечек :heart: нигде не видно.

Также у нас установлен официальный плагин Discourse Reactions. Может ли это быть причиной данной ошибки?

5 лайков

Я только что включил и выключил реакции на моём тестовом сайте, чтобы проверить это, и кажется, что всё работает. Не является ли это следствием исправления этой ошибки Палец вверх, дважды?

3 лайка

Здравствуйте,

По умолчанию реакции отключены (скрыты) в темах голосования с помощью CSS.

Вы можете снова включить их, добавив небольшой фрагмент CSS в компонент Common/CSS :arrow_down_small:

.post-voting-topic,
.post-voting-topic-sort-by-activity {
  .discourse-reactions-actions {
    display: inline-flex;
  }
}
6 лайков

Спасибо большое!

Ограничение по умолчанию понятно (слишком много вариантов для обратной связи может запутать), но если есть настройка, позволяющая администраторам включать «лайки», и эти администраторы уже включили реакции на своём сайте, то логично было бы автоматически включать реакции в постах с голосованием при включении этой настройки.

В любом случае, я полагаю, что больше администраторов, скорее всего, подумают, что это ошибка, чем будут проверять код и исправлять CSS. :slight_smile:

3 лайка
установлены реакции включено голосование за посты включены лайки на ответы вызвать removePostMenuButton(‘like’)?
нет нет нет (Н/Д) нет, оставить :heart:
да нет Н/Д да, убрать кнопку лайка, показать реакции
нет да нет да, убрать кнопку лайка для ответов
нет да да нет, оставить :heart: для каждого поста
да да нет да, убрать кнопку лайка, показывать реакции только для первого поста, а не для ответов
да да да да, убрать кнопку лайка, показывать реакции для всех

Здесь набросана своего рода таблица истинности. Нам нужно программно обеспечивать отображение реакций для разных постов в зависимости от настроек сайта, особенно от параметра enable likes on answers, вместо простого использования CSS display:none.

@tgxworld ещё тогда частично затронул эту тему, предложив, что, вероятно, стоит предоставить API в плагине discourse-reactions (t/67550/10). Возможно, стоит рассмотреть этот вариант.

7 лайков
// Удаление кнопки «like»
api.removePostMenuButton("like");
// И повторное добавление
api.decorateWidget("post-menu:before-extra-controls", (dec) => {
  return dec.attach("discourse-reactions-actions", {

Вместо этого :arrow_up_small: мы должны добавить метод replacePostMenuButton в основной API плагинов и использовать его в плагине реакций. В этом случае нам не потребуется отдельная логика для кнопки реакций в плагине голосования за посты.

Поскольку существует обходной путь, я внесу это изменение после следующего выпуска.

7 лайков

Это потребовало 3 PR, но ваша идея реализации была потрясающей, @vinothkannans — всё работает как по маслу. Как только всё будет слито, я напишу снова :slight_smile:

9 лайков

PR-запросы были слиты, и теперь (после обновления вашего экземпляра Discourse) реакции учитывают настройку qa_enable_likes_on_answers. Спасибо за отчет об ошибке @icaria36!

4 лайка

Объединённые PR ломают стабильный релиз Discourse. Сайт не загружается из-за ошибки в JavaScript.

Uncaught (in promise) TypeError: e.replacePostMenuButton is not a function
    u discourse-reactions.js:12
    withPluginApi plugin-api.js:2247
    initialize discourse-reactions.js:165
    initialize app.js:173
    runInstanceInitializers Ember
    each dag-map.js:192
    walk dag-map.js:121
    each dag-map.js:66
    topsort dag-map.js:72
    Ember 4
    invoke queue.ts:201
    flush queue.ts:98
    flush deferred-action-queues.ts:75
    _end index.ts:616
    _boundAutorunEnd index.ts:257
discourse-reactions.js:12
2 лайка

Да, я должен был это предвидеть. Я внесу исправление в плагин реакций, чтобы он использовал резервный вариант, когда replacePostMenuButton отсутствует.

Редактирование: Я объединил изменение, которое добавляет обратную совместимость.

3 лайка

Эта тема была автоматически закрыта через 4 дня. Новые ответы больше не принимаются.