How to refresh topic title when it was changed in one of plugin's custom controllers

AI-generated summary

Janno_Liivak is updating a topic using a custom controller and Ajax, but is unable to refresh the topic title in the topic view after the update. The title only changes in the page title, not in the topic main title.

sam suggested using the header:update-topic event to trigger a title update, and also mentioned that using PostRevisor can handle this automatically. However, Janno_Liivak is unable to use PostRevisor as it prevents changes after the editing time has passed.

sam replied that this is not a problem, as validations can be disabled when updating via the API, or the edit can be performed as a system action. Janno_Liivak thanked sam and will give this a try.

I update topic using custom controller where function was triggered through ajax. Client side code gets back result with a changed topic title but I’m unable to figure out how to refresh topic title in topic-view inside “then” callback. Strangely the archieved property change will call archieved “lock” icon to show up. Title will change only in page title but not in topic main title.

export default {
  actions: {
    clickSoldButton(topic) {
      ajax("/topic/sold", {
        type: "PUT",
        data: {
          topic_id: topic.id
        }
      }).then((result) => {
        topic.set('custom_fields.sold_at', result.topic.sold_at);
        topic.set('title', result.topic.title);
        topic.set('archived', result.topic.archived);
      }).catch(() => {
        bootbox.alert(I18n.t('topic_trading.error_while_marked_as_sold'));
      });
    }
  }
};

Is there a certain way to get Title to change other than navigating to topic or page reload?

There is a new event for this you can use after

https://github.com/discourse/discourse/commit/f8a31d927f35e1302ec4788b8a430667f703f59a

this.appEvents.trigger('header:update-topic', topic);

Also, if you properly use PostRevisor this is handled automatically for you.

Thank you. But I can’t use PostRevisor as I want topic to be updated even when it’s not editable by user. As I understand, revisor will go through Topic.update which prevents changes after editing time has passed?

Not really a problem, cause you can disable validations when you update if you wish via the api (or perform the edit as system)

Ok. I’ll give it a try. Thanks!