From f03f64a33c85bb242ddf10e98c9fd406374710fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Saquetim?= Date: Fri, 20 Jun 2025 19:07:35 -0300 Subject: [PATCH] DEV: Refactor topic model to use tracked properties for accepted answer logic Refactored the `topic` model to replace legacy Ember property access (`get/set`) with modern tracked properties. Updated related logic in `add-topic-list-class` and `solved-unaccept-answer-button` to align with these changes. --- .../components/solved-unaccept-answer-button.gjs | 2 +- .../discourse/initializers/add-topic-list-class.js | 2 +- .../initializers/extend-for-solved-button.gjs | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/assets/javascripts/discourse/components/solved-unaccept-answer-button.gjs b/assets/javascripts/discourse/components/solved-unaccept-answer-button.gjs index afc261d..f021426 100644 --- a/assets/javascripts/discourse/components/solved-unaccept-answer-button.gjs +++ b/assets/javascripts/discourse/components/solved-unaccept-answer-button.gjs @@ -22,7 +22,7 @@ function unacceptPost(post) { accepted_answer: false, }); - topic.set("accepted_answer", undefined); + topic.accepted_answer = undefined; ajax("/solution/unaccept", { type: "POST", diff --git a/assets/javascripts/discourse/initializers/add-topic-list-class.js b/assets/javascripts/discourse/initializers/add-topic-list-class.js index d857f7a..1a1fc0a 100644 --- a/assets/javascripts/discourse/initializers/add-topic-list-class.js +++ b/assets/javascripts/discourse/initializers/add-topic-list-class.js @@ -8,7 +8,7 @@ export default { api.registerValueTransformer( "topic-list-item-class", ({ value, context }) => { - if (context.topic.get("has_accepted_answer")) { + if (context.topic.has_accepted_answer) { value.push("status-solved"); } return value; diff --git a/assets/javascripts/discourse/initializers/extend-for-solved-button.gjs b/assets/javascripts/discourse/initializers/extend-for-solved-button.gjs index 8b2362d..ca02777 100644 --- a/assets/javascripts/discourse/initializers/extend-for-solved-button.gjs +++ b/assets/javascripts/discourse/initializers/extend-for-solved-button.gjs @@ -1,4 +1,5 @@ import Component from "@glimmer/component"; +import { tracked } from "@glimmer/tracking"; import { withSilencedDeprecations } from "discourse/lib/deprecated"; import { withPluginApi } from "discourse/lib/plugin-api"; import RenderGlimmer from "discourse/widgets/render-glimmer"; @@ -24,6 +25,15 @@ function customizePost(api) { "topic_accepted_answer" ); + api.modifyClass( + "model:topic", + (Superclass) => + class extends Superclass { + @tracked accepted_answer; + @tracked has_accepted_answer; + } + ); + api.renderAfterWrapperOutlet( "post-content-cooked-html", class extends Component {