From 630541bc1a74dc9023787525f39616cacb1f4037 Mon Sep 17 00:00:00 2001 From: Angus McLeod Date: Fri, 9 Sep 2022 16:18:28 +0200 Subject: [PATCH 1/4] Add create as qa default category setting --- .../question-answer-category-settings.hbs | 7 ++++++ .../initializers/extend-composer-actions.js | 16 ++++++++++++++ config/locales/client.en.yml | 5 +++++ plugin.rb | 9 ++++++++ test/javascripts/acceptance/composer-test.js | 22 +++++++++++++++++++ 5 files changed, 59 insertions(+) create mode 100644 assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs diff --git a/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs b/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs new file mode 100644 index 00000000..a572cf2f --- /dev/null +++ b/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs @@ -0,0 +1,7 @@ +

{{i18n 'category.qa_settings_heading'}}

+
+ +
diff --git a/assets/javascripts/discourse/initializers/extend-composer-actions.js b/assets/javascripts/discourse/initializers/extend-composer-actions.js index 649d99ca..aa82c2ff 100644 --- a/assets/javascripts/discourse/initializers/extend-composer-actions.js +++ b/assets/javascripts/discourse/initializers/extend-composer-actions.js @@ -1,6 +1,7 @@ import I18n from "I18n"; import { withPluginApi } from "discourse/lib/plugin-api"; import { CREATE_TOPIC } from "discourse/models/composer"; +import { observes } from "discourse-common/utils/decorators"; export default { name: "extend-composer-actions", @@ -75,6 +76,21 @@ export default { return []; } }); + + api.modifyClass("model:composer", { + pluginId: "discourse-question-answer", + + @observes("categoryId") + categoryCreateAsQADefault() { + const createAsQA = this.category?.create_as_qa_default; + + if (this.creatingTopic && createAsQA !== this.createAsQA) { + this.set("createAsQA", createAsQA); + this.notifyPropertyChange("replyOptions"); + this.notifyPropertyChange("action"); + } + }, + }); }); }, }; diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index 10ca599a..dcf5a75f 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -6,6 +6,11 @@ en: question_answer_user_commented: "new comment" popup: question_answer_user_commented: '%{username} commented in "%{topic}" - %{site_title}' + + category: + qa_settings_heading: Question Answer + create_as_qa_default: New topics default to Q&A in this category. + composer: create_qa: label: "Create Q&A topic" diff --git a/plugin.rb b/plugin.rb index ccd8eb27..70253de5 100644 --- a/plugin.rb +++ b/plugin.rb @@ -191,4 +191,13 @@ false end + + register_category_custom_field_type('create_as_qa_default', :boolean) + if Site.respond_to? :preloaded_category_custom_fields + Site.preloaded_category_custom_fields << 'create_as_qa_default' + end + add_to_class(:category, :create_as_qa_default) do + ActiveModel::Type::Boolean.new.cast(self.custom_fields['create_as_qa_default']) + end + add_to_serializer(:basic_category, :create_as_qa_default) { object.create_as_qa_default } end diff --git a/test/javascripts/acceptance/composer-test.js b/test/javascripts/acceptance/composer-test.js index a1111120..5f069211 100644 --- a/test/javascripts/acceptance/composer-test.js +++ b/test/javascripts/acceptance/composer-test.js @@ -4,6 +4,7 @@ import selectKit from "discourse/tests/helpers/select-kit-helper"; import { test } from "qunit"; import I18n from "I18n"; import { parsePostData } from "discourse/tests/helpers/create-pretender"; +import Category from "discourse/models/category"; let createAsQASetInRequest = false; @@ -76,4 +77,25 @@ acceptance("Discourse Question Answer - composer", function (needs) { "submits the right request to create topic as Q&A formatted" ); }); + + test("Creating new topic in category with Q&A create default", async function (assert) { + Category.findById(2).set("create_as_qa_default", true); + + await visit("/"); + await click("#create-topic"); + + assert.strictEqual( + query(".action-title").innerText.trim(), + I18n.t("topic.create_long") + ); + + const categoryChooser = selectKit(".category-chooser"); + await categoryChooser.expand(); + await categoryChooser.selectRowByValue(2); + + assert.strictEqual( + query(".action-title").innerText.trim(), + I18n.t("composer.create_qa.label") + ); + }); }); From 4e3225fcf64c26806e03adfed11fa39fdc166b18 Mon Sep 17 00:00:00 2001 From: Angus McLeod Date: Mon, 12 Sep 2022 12:22:56 +0200 Subject: [PATCH 2/4] Linting: use double quotes in template --- .../question-answer-category-settings.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs b/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs index a572cf2f..60b71bdb 100644 --- a/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs +++ b/assets/javascripts/discourse/connectors/category-custom-settings/question-answer-category-settings.hbs @@ -1,4 +1,4 @@ -

{{i18n 'category.qa_settings_heading'}}

+

{{i18n "category.qa_settings_heading"}}