From b6e9871b4b48d2e5b176accf921014f7b447b721 Mon Sep 17 00:00:00 2001
From: Guo Xiang Tan <tgx_world@hotmail.com>
Date: Fri, 31 Mar 2017 15:02:36 +0800
Subject: [PATCH] Update `Topic#closed` client side when closing/opening a
 topic temporarily.

---
 .../discourse/controllers/edit-topic-status-update.js.es6      | 1 +
 app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 | 1 -
 app/controllers/topics_controller.rb                           | 3 ++-
 spec/integration/managing_topic_status_spec.rb                 | 2 ++
 4 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/app/assets/javascripts/discourse/controllers/edit-topic-status-update.js.es6 b/app/assets/javascripts/discourse/controllers/edit-topic-status-update.js.es6
index b07fcd2f3ef..27c3a13c164 100644
--- a/app/assets/javascripts/discourse/controllers/edit-topic-status-update.js.es6
+++ b/app/assets/javascripts/discourse/controllers/edit-topic-status-update.js.es6
@@ -71,6 +71,7 @@ export default Ember.Controller.extend(ModalFunctionality, {
         this.send('closeModal');
         this.set('topicStatusUpdate.execute_at', result.execute_at);
         this.set('topicStatusUpdate.duration', result.duration);
+        this.set('model.closed', result.closed);
       } else {
         this.set('topicStatusUpdate', Ember.Object.create({}));
         this.set('selection', null);
diff --git a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6 b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6
index ca925d343db..6b927c05fcf 100644
--- a/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6
+++ b/app/assets/javascripts/discourse/widgets/topic-timeline.js.es6
@@ -347,7 +347,6 @@ export default createWidget('topic-timeline', {
       result.push(h('div.title', elems));
     }
 
-
     if (!attrs.fullScreen && currentUser && currentUser.get('canManageTopic')) {
       result.push(h('div.timeline-controls', this.attach('topic-admin-menu-button', { topic })));
     }
diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb
index 257744a359a..42d76310f33 100644
--- a/app/controllers/topics_controller.rb
+++ b/app/controllers/topics_controller.rb
@@ -310,7 +310,8 @@ class TopicsController < ApplicationController
       render json: success_json.merge!({
         execute_at: topic_status_update&.execute_at,
         duration: topic_status_update&.duration,
-        based_on_last_post: topic_status_update&.based_on_last_post
+        based_on_last_post: topic_status_update&.based_on_last_post,
+        closed: topic.closed
       })
     else
       render_json_error(topic)
diff --git a/spec/integration/managing_topic_status_spec.rb b/spec/integration/managing_topic_status_spec.rb
index 4e59f9c3df7..a70f2141d0d 100644
--- a/spec/integration/managing_topic_status_spec.rb
+++ b/spec/integration/managing_topic_status_spec.rb
@@ -56,6 +56,7 @@ RSpec.describe "Managing a topic's status update", type: :request do
         .to be_within(1.seconds).of(DateTime.parse(topic_status_update.execute_at.to_s))
 
       expect(json['duration']).to eq(topic_status_update.duration)
+      expect(json['closed']).to eq(topic.reload.closed)
     end
 
     it 'should be able to delete a topic status update' do
@@ -72,6 +73,7 @@ RSpec.describe "Managing a topic's status update", type: :request do
 
       expect(json['execute_at']).to eq(nil)
       expect(json['duration']).to eq(nil)
+      expect(json['closed']).to eq(topic.closed)
     end
 
     describe 'invalid status type' do