From c7b9f044a4c449ff5532f27766fe0a3f5f8a8e44 Mon Sep 17 00:00:00 2001 From: Roman Rizzi Date: Mon, 14 Dec 2020 14:06:50 -0300 Subject: [PATCH] FEATURE: Automatically disable slow mode. (#11461) Staff and TL4 users can decide the slow mode duration. We'll internally set a topic timer to disable it. --- .../app/components/future-date-input.js | 1 + .../app/controllers/edit-slow-mode.js | 3 +- .../javascripts/discourse/app/models/topic.js | 4 +- .../components/future-date-input.hbs | 2 +- .../app/templates/modal/edit-slow-mode.hbs | 12 +++++ app/controllers/topics_controller.rb | 11 +++++ app/jobs/regular/clear_slow_mode.rb | 24 ++++++++++ app/models/topic_timer.rb | 15 ++++-- config/locales/client.en.yml | 1 + spec/requests/topics_controller_spec.rb | 48 +++++++++++++++++++ 10 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 app/jobs/regular/clear_slow_mode.rb diff --git a/app/assets/javascripts/discourse/app/components/future-date-input.js b/app/assets/javascripts/discourse/app/components/future-date-input.js index ab0f447601..f1d7752fb1 100644 --- a/app/assets/javascripts/discourse/app/components/future-date-input.js +++ b/app/assets/javascripts/discourse/app/components/future-date-input.js @@ -17,6 +17,7 @@ export default Component.extend({ isBasedOnLastPost: equal("selection", "set_based_on_last_post"), displayDateAndTimePicker: and("includeDateTime", "isCustom"), displayLabel: null, + labelClasses: null, displayNumberInput: or("isBasedOnLastPost", "isBasedOnDuration"), init() { diff --git a/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js b/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js index e76573617f..84f990eeb4 100644 --- a/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js +++ b/app/assets/javascripts/discourse/app/controllers/edit-slow-mode.js @@ -14,6 +14,7 @@ export default Controller.extend(ModalFunctionality, { minutes: null, seconds: null, saveDisabled: false, + enabledUntil: null, showCustomSelect: equal("selectedSlowMode", "custom"), init() { @@ -99,7 +100,7 @@ export default Controller.extend(ModalFunctionality, { this._parseValue(this.seconds) ); - Topic.setSlowMode(this.model.id, seconds) + Topic.setSlowMode(this.model.id, seconds, this.enabledUntil) .catch(popupAjaxError) .then(() => { this.set("model.slow_mode_seconds", seconds); diff --git a/app/assets/javascripts/discourse/app/models/topic.js b/app/assets/javascripts/discourse/app/models/topic.js index 819f8c8ff0..c350c5e747 100644 --- a/app/assets/javascripts/discourse/app/models/topic.js +++ b/app/assets/javascripts/discourse/app/models/topic.js @@ -837,8 +837,10 @@ Topic.reopenClass({ return ajax(`/t/id_for/${slug}`); }, - setSlowMode(topicId, seconds) { + setSlowMode(topicId, seconds, enabledUntil) { const data = { seconds }; + data.enabled_until = enabledUntil; + return ajax(`/t/${topicId}/slow_mode`, { type: "PUT", data }); }, }); diff --git a/app/assets/javascripts/discourse/app/templates/components/future-date-input.hbs b/app/assets/javascripts/discourse/app/templates/components/future-date-input.hbs index 43c7e421e0..aa92210bc7 100644 --- a/app/assets/javascripts/discourse/app/templates/components/future-date-input.hbs +++ b/app/assets/javascripts/discourse/app/templates/components/future-date-input.hbs @@ -1,7 +1,7 @@
{{#unless isBasedOnDuration}}
- + {{future-date-input-selector minimumResultsForSearch=-1 statusType=statusType diff --git a/app/assets/javascripts/discourse/app/templates/modal/edit-slow-mode.hbs b/app/assets/javascripts/discourse/app/templates/modal/edit-slow-mode.hbs index 956db77d76..fdf231d130 100644 --- a/app/assets/javascripts/discourse/app/templates/modal/edit-slow-mode.hbs +++ b/app/assets/javascripts/discourse/app/templates/modal/edit-slow-mode.hbs @@ -25,6 +25,18 @@ {{input value=seconds type="number" class="input-small"}}
{{/if}} + +
+ {{future-date-input + class="enabled-until" + label="topic.slow_mode_update.enabled_until" + labelClasses="slow-mode-label" + includeFarFuture=false + clearable=true + input=enabledUntil + onChangeInput=(action (mut enabledUntil)) + }} +
{{/d-modal-body}}