Post Voting has likes enabled but they won't appear

AI-generated summary

Post Voting has likes enabled but they won’t appear

A user, icaria36, reported that despite having the setting “qa enable likes on answers” enabled, likes (:heart:) are not visible. JammyDodger discovered that the issue is connected to the Discourse Reactions plugin.

Don explained that Reactions are disabled by default on post voting topics due to CSS, but provided a workaround by adding custom CSS to re-enable them.

nat proposed a truth table to determine when reactions should be shown based on site settings, suggesting that the current implementation is too simplistic.

vinothkannans proposed a solution by adding a replacePostMenuButton method in the core plugin API, which was implemented by markvanlan in three PRs.

However, Firefishy reported that the merged PRs broke the stable release of Discourse, causing a JavaScript error. markvanlan pushed a fix to the reactions plugin to add backwards compatibility.

We have the setting qa enable likes on answers enabled but the are no :heart: to be seen.

We also have the official plugin Discourse Reactions installed. Can this be the cause of this bug?

5 Likes

I’ve just toggled Reactions on/off on my test site to check this out and it seems like it is connected. I wonder if this is a consequence of this bug fix Thumbs up, twice?

3 Likes

Hello,

Reactions are disabled (hide) by default on post voting topics with css.

You can reactivate it with adding a little css to a component Common/CSS :arrow_down_small:

.post-voting-topic,
.post-voting-topic-sort-by-activity {
  .discourse-reactions-actions {
    display: inline-flex;
  }
}
6 Likes

Thank you very much!

The limitation by default is understandable (too many options to give feedback can be confusing) but if there is a setting allowing admins to enable “likes” and those admins had enabled reactions in their site, then it would be logical to enable reactions in voting posts when they enable the setting.

And in any case, I guess more admins are likely to think that there is a bug rather than checking the code and fix the CSS. :slight_smile:

3 Likes
reactions installed post voting installed enable likes on answers invoke removePostMenuButton(‘like’)?
no no no (NA) no, keep :heart:
yes no NA yes, remove the like button, show reactions
no yes no yes, remove the like button for answers
no yes yes no, keep :heart: for every post
yes yes no yes, remove the like button, also only show reactions for the first post not answers
yes yes yes yes, remove the like button, show reactions for all

Sketched out something like a truth table here. We need to programmatically make reactions show up for posts different posts depending on the site settings, especially the enable likes on answers one, instead of a straight up css display:none.

@tgxworld sort of caught this one back then suggesting that we should probably expose an API on discourse-reactions (t/67550/10). Perhaps we should consider that.

7 Likes
// Removing the `like` button
api.removePostMenuButton("like");
// And adding it again
api.decorateWidget("post-menu:before-extra-controls", (dec) => {
  return dec.attach("discourse-reactions-actions", {

Instead of doing this :arrow_up_small: we should add a replacePostMenuButton method in core plugin api and use it in reactions plugin. In that case, we don’t need a separate logic for reaction button in post voting plugin.

Since there is a workaround, I will make this change after the upcoming release.

7 Likes

This required 3 PRs but you’re implementation idea was awesome @vinothkannans, works like a charm. Once these are all merge I’ll post again :slight_smile:

https://github.com/discourse/discourse/pull/22995

https://github.com/discourse/discourse-reactions/pull/229/files

https://github.com/discourse/discourse-post-voting/pull/153

9 Likes

The PRs have been merged and now and (when your Discourse instance is updated), reactions respect the qa_enable_likes_on_answers setting. Thanks for the bug report @icaria36 !

4 Likes

The merged PRs break the stable release of discourse. The site does not load due to a javascript error.

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 Likes

Yeah, I should have anticipated this. I’ll push a fix to the reactions plugin to fall back when replacePostMenuButton is not present.

Edit: I’ve merged a change that adds backwards compatability.

3 Likes

This topic was automatically closed after 4 days. New replies are no longer allowed.