diff --git a/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.hbs b/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.hbs new file mode 100644 index 00000000..4b5d673d --- /dev/null +++ b/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.hbs @@ -0,0 +1,16 @@ +

{{i18n "admin.wizard.category_settings.custom_wizard.title"}}

+ +
+ +
+ {{combo-box + value=wizardListVal + content=wizardList + onChange=(action "changeWizard") + options=(hash + none="admin.wizard.select" + )}} +
+
diff --git a/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.js.es6 b/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.js.es6 new file mode 100644 index 00000000..16352f95 --- /dev/null +++ b/assets/javascripts/discourse/connectors/category-custom-settings/custom-wizard-category-settings.js.es6 @@ -0,0 +1,24 @@ +import CustomWizard from "../../models/custom-wizard"; +import { popupAjaxError } from "discourse/lib/ajax-error"; + +export default { + setupComponent(attrs, component) { + CustomWizard.all() + .then((result) => { + component.set("wizardList", result); + }) + .catch(popupAjaxError); + + component.set( + "wizardListVal", + attrs?.category?.custom_fields?.create_topic_wizard + ); + }, + + actions: { + changeWizard(wizard) { + this.set("wizardListVal", wizard); + this.set("category.custom_fields.create_topic_wizard", wizard); + }, + }, +}; diff --git a/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6 b/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6 index 63ddd5e8..20787b4e 100644 --- a/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6 +++ b/assets/javascripts/discourse/initializers/custom-wizard-edits.js.es6 @@ -1,4 +1,6 @@ import DiscourseURL from "discourse/lib/url"; +import { withPluginApi } from "discourse/lib/plugin-api"; +import getUrl from "discourse-common/lib/get-url"; export default { name: "custom-wizard-edits", @@ -16,5 +18,23 @@ export default { } return existing.apply(this, [path, opts]); }; + + withPluginApi("0.8.7", (api) => { + api.modifyClass("component:d-navigation", { + pluginId: "custom-wizard", + actions: { + clickCreateTopicButton() { + let createTopicWizard = this.get( + "category.custom_fields.create_topic_wizard" + ); + if (createTopicWizard) { + window.location.href = getUrl(`/w/${createTopicWizard}`); + } else { + this._super(); + } + }, + }, + }); + }); }, }; diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index b07fd84a..40e103c8 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -60,7 +60,11 @@ en: select_type: "Select a type" condition: "Condition" index: "Index" - + category_settings: + custom_wizard: + title: "Custom Wizard" + create_topic_wizard: "Select a wizard to replace the new topic composer in this category." + message: wizard: select: "Select a wizard, or create a new one" diff --git a/plugin.rb b/plugin.rb index 9768412c..bf43de25 100644 --- a/plugin.rb +++ b/plugin.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # name: discourse-custom-wizard # about: Create custom wizards -# version: 1.15.6 +# version: 1.16.0 # authors: Angus McLeod # url: https://github.com/paviliondev/discourse-custom-wizard # contact emails: angus@thepavilion.io @@ -116,6 +116,13 @@ after_initialize do load File.expand_path(path, __FILE__) end + # preloaded category custom fields + %w[ + create_topic_wizard + ].each do |custom_field| + Site.preloaded_category_custom_fields << custom_field + end + Liquid::Template.register_filter(::CustomWizard::LiquidFilter::FirstNonEmpty) add_class_method(:wizard, :user_requires_completion?) do |user|